diff options
author | wm4 <wm4@nowhere> | 2018-05-20 13:38:54 +0200 |
---|---|---|
committer | Jan Ekström <jeebjp@gmail.com> | 2018-05-31 01:24:51 +0300 |
commit | b13bb9fbdd5b375ba50bb133edd0e2b3865d0d46 (patch) | |
tree | 3264861439bf1c0cbff7b98b2b3bc3dc53110383 /options | |
parent | 7d5133b713143c73acd3cd8497ba61e73d5b136f (diff) |
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.)
Diffstat (limited to 'options')
-rw-r--r-- | options/m_config.c | 4 |
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; } |