Mercurial > ~dholland > hg > tradcpp > index.cgi
diff eval.c @ 203:3a25180d3a5c
Abort on line numbering or column numbering overflow.
Line numbers are limited to values that fit in "unsigned int". Also
reject input lines longer than 2^32-1 characters. It seems reasonable
to presume that any input that violates these constraints is someone
screwing around and not a serious attempt to compile or preprocess
anything useful. Done in response to n2129, but without getting into
any of the silliness found there.
author | David A. Holland |
---|---|
date | Tue, 01 Aug 2017 14:51:04 -0400 |
parents | 1d2bad7151f9 |
children |
line wrap: on
line diff
--- a/eval.c Thu Dec 15 23:53:13 2016 -0500 +++ b/eval.c Tue Aug 01 14:51:04 2017 -0400 @@ -708,29 +708,29 @@ while (expr[pos] != '\0') { len = strspn(expr+pos, ws); pos += len; - p->column += len; + place_addcolumns(p, len); /* trailing whitespace is supposed to have been pruned */ assert(expr[pos] != '\0'); if (check_word(p, expr, pos, &len)) { pos += len; - p->column += len; + place_addcolumns(p, len); continue; } if (check_tokens_2(p, expr, pos)) { pos += 2; - p->column += 2; + place_addcolumns(p, 2); continue; } if (check_tokens_1(p, expr, pos)) { pos++; - p->column++; + place_addcolumns(p, 1); continue; } complain(p, "Invalid character %u in #if-expression", (unsigned char)expr[pos]); complain_fail(); pos++; - p->column++; + place_addcolumns(p, 1); } token(p, T_EOF, 0); }