aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog7
-rw-r--r--gcc/c-family/c-format.c6
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++;