diff --git a/ChangeLog.adoc b/ChangeLog.adoc index a68c4ec83..834bdd05e 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -15,6 +15,7 @@ For a list of important changes that require manual actions, please look at rele Bug fixes:: + * core: fix integer overflow when setting integer option with `++N` or `--N` * irc: add missing tags on multiline messages (issue #1987) * irc: fix redirection of command `/list` when the reply doesn't start with message 321 (start of /list) diff --git a/src/core/wee-config-file.c b/src/core/wee-config-file.c index fc2123ffa..648aafa93 100644 --- a/src/core/wee-config-file.c +++ b/src/core/wee-config-file.c @@ -1527,22 +1527,22 @@ config_file_option_set (struct t_config_option *option, const char *value, { error = NULL; number = strtol (value + 2, &error, 10); - if (error && !error[0]) + if (error && !error[0] + && (long)old_value + number <= (long)(option->max)) { value_int = old_value + number; - if (value_int <= option->max) - new_value_ok = 1; + new_value_ok = 1; } } else if (strncmp (value, "--", 2) == 0) { error = NULL; number = strtol (value + 2, &error, 10); - if (error && !error[0]) + if (error && !error[0] + && (long)old_value - number >= (long)(option->min)) { value_int = old_value - number; - if (value_int >= option->min) - new_value_ok = 1; + new_value_ok = 1; } } else