diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-02-26 00:43:51 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-02-26 00:43:51 +0100 |
commit | 7da73ba7ef0e48d756677d17b8addc4f4fe2a484 (patch) | |
tree | 99997a3571b2eaa42b428daa7eefe58d3eb56296 | |
parent | 796954501274027ac9ba69b8c7f8eb08339f51ac (diff) | |
download | gcc-7da73ba7ef0e48d756677d17b8addc4f4fe2a484.zip gcc-7da73ba7ef0e48d756677d17b8addc4f4fe2a484.tar.gz gcc-7da73ba7ef0e48d756677d17b8addc4f4fe2a484.tar.bz2 |
re PR c/89495 (gcc/c-family/c-format.c:1272:20: runtime error: signed integer overflow: 214748365 * 10 cannot be represented in type 'int')
PR c/89495
* c-format.c (maybe_read_dollar_number): Compute nargnum in
HOST_WIDE_INT type to avoid overflows and change overflow_flag
checking.
From-SVN: r269198
-rw-r--r-- | gcc/c-family/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c-family/c-format.c | 6 |
2 files changed, 10 insertions, 3 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 951231e..72d4fd2 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,10 @@ +2019-02-25 Jakub Jelinek <jakub@redhat.com> + + PR c/89495 + * c-format.c (maybe_read_dollar_number): Compute nargnum in + HOST_WIDE_INT type to avoid overflows and change overflow_flag + checking. + 2019-02-22 Richard Biener <rguenther@suse.de> * c-pch.c (no_checksum): Remove. diff --git a/gcc/c-family/c-format.c b/gcc/c-family/c-format.c index 9b48ee3..a7f76c1 100644 --- a/gcc/c-family/c-format.c +++ b/gcc/c-family/c-format.c @@ -1268,9 +1268,9 @@ maybe_read_dollar_number (const char **format, overflow_flag = 0; while (ISDIGIT (*fcp)) { - int nargnum; - nargnum = 10 * argnum + (*fcp - '0'); - if (nargnum < 0 || nargnum / 10 != argnum) + HOST_WIDE_INT nargnum + = HOST_WIDE_INT_UC (10) * argnum + (*fcp - '0'); + if ((int) nargnum != nargnum) overflow_flag = 1; argnum = nargnum; fcp++; |