From a105d5087e43bf318f8958bdc2a714b827d9cddb Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Wed, 3 Apr 2019 16:45:53 +0200 Subject: [PATCH] as/lexer/number.c: should not stop parsing if we overflow. --- as/lexer/number.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/as/lexer/number.c b/as/lexer/number.c index ba7e1b6..231cd42 100644 --- a/as/lexer/number.c +++ b/as/lexer/number.c @@ -55,10 +55,16 @@ int lexer_read_num_dec(FILE *fp, int neg, int *out) { int c, val = 0, oflow = 0; while((c = fgetc(fp)) != EOF) { + if (!lexer_is_num(c)) { ungetc(c, fp); break; } + + // Ignore if we have overflowed, but keep reading all numbers. + if (oflow) + continue; + val = (val * 10) + (c - '0'); // Cool trick here. @@ -67,10 +73,10 @@ int lexer_read_num_dec(FILE *fp, int neg, int *out) { if (val > (0x80 - !neg)) { // Truncate value. val = 0x80 - !neg; - oflow = 1; - break; - } + // Set overflow flag. + oflow = 1; + } } *out = neg ? -1 * val : val;