Mercurial > ~dholland > hg > tradcpp > index.cgi
diff place.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/place.c Thu Dec 15 23:53:13 2016 -0500 +++ b/place.c Tue Aug 01 14:51:04 2017 -0400 @@ -193,6 +193,34 @@ p->column = 1; } +void +place_addcolumns(struct place *p, unsigned cols) +{ + unsigned newcol; + + newcol = p->column + cols; + if (newcol < p->column) { + /* overflow (use the old place to complain) */ + complain(p, "Column numbering overflow"); + die(); + } + p->column = newcol; +} + +void +place_addlines(struct place *p, unsigned lines) +{ + unsigned nextline; + + nextline = p->line + lines; + if (nextline < p->line) { + /* overflow (use the old place to complain) */ + complain(p, "Line numbering overflow"); + die(); + } + p->line = nextline; +} + const char * place_getname(const struct place *p) {