summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2018-05-20 13:38:54 +0200
committerJan Ekström <jeebjp@gmail.com>2018-05-31 01:24:51 +0300
commitb13bb9fbdd5b375ba50bb133edd0e2b3865d0d46 (patch)
tree3264861439bf1c0cbff7b98b2b3bc3dc53110383
parent7d5133b713143c73acd3cd8497ba61e73d5b136f (diff)
downloadmpv-b13bb9fbdd5b375ba50bb133edd0e2b3865d0d46.tar.bz2
mpv-b13bb9fbdd5b375ba50bb133edd0e2b3865d0d46.tar.xz
m_config: check for int16_t offset overflow
For some reason shadow_offset is a int16_t variable (to save some space or something), which means the static part of the entire option list must be below 32KB. This is fine, but still add a check against overflows. (Currently it's 3.6KB. This does not include dynamic allocations like strings.)
-rw-r--r--options/m_config.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/options/m_config.c b/options/m_config.c
index 2f63cf5363..aa0018314d 100644
--- a/options/m_config.c
+++ b/options/m_config.c
@@ -525,7 +525,9 @@ static void m_config_add_option(struct m_config *config,
// The required alignment is unknown, so go with the maximum C
// could require. Slightly wasteful, but not that much.
int align = (size - config->shadow_size % size) % size;
- co.shadow_offset = config->shadow_size + align;
+ int offset = config->shadow_size + align;
+ assert(offset <= INT16_MAX);
+ co.shadow_offset = offset;
config->shadow_size = co.shadow_offset + size;
}