diff options
author | Martin Liska <mliska@suse.cz> | 2020-12-15 09:57:19 +0100 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2020-12-16 10:20:45 +0100 |
commit | 5c5eb7e4872025e8d5e8ae2f0e568403f7c8803d (patch) | |
tree | 100fe6eea939511c8f90398108f9ccdbeedb0e69 /gcc/opts-common.c | |
parent | 61e3c180ad6913fa5af39059de5ba7b3bde50cda (diff) | |
download | gcc-5c5eb7e4872025e8d5e8ae2f0e568403f7c8803d.zip gcc-5c5eb7e4872025e8d5e8ae2f0e568403f7c8803d.tar.gz gcc-5c5eb7e4872025e8d5e8ae2f0e568403f7c8803d.tar.bz2 |
options: fix integer overflow
gcc/ChangeLog:
PR rtl-optimization/98271
PR rtl-optimization/98276
PR tree-optimization/98279
* opts-common.c (set_option): Do not allow overflow for integer
arguments.
gcc/testsuite/ChangeLog:
PR rtl-optimization/98271
PR rtl-optimization/98276
PR tree-optimization/98279
* gcc.dg/pr98271.c: New test.
Diffstat (limited to 'gcc/opts-common.c')
-rw-r--r-- | gcc/opts-common.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/opts-common.c b/gcc/opts-common.c index 8ec8c1e..30be7d5 100644 --- a/gcc/opts-common.c +++ b/gcc/opts-common.c @@ -1466,9 +1466,15 @@ set_option (struct gcc_options *opts, struct gcc_options *opts_set, } else { - *(int *) flag_var = value; - if (set_flag_var) - *(int *) set_flag_var = 1; + if (value > INT_MAX) + error_at (loc, "argument to %qs is bigger than %d", + option->opt_text, INT_MAX); + else + { + *(int *) flag_var = value; + if (set_flag_var) + *(int *) set_flag_var = 1; + } } break; |