diff options
author | Explorer09 <explorer09@gmail.com> | 2017-10-14 00:31:01 +0800 |
---|---|---|
committer | Will Estes <westes575@gmail.com> | 2017-11-28 14:56:42 -0500 |
commit | 12d2f8608046c5d43646e3c1dc277c0a2914ae1b (patch) | |
tree | a15b0d9177867becbe5e7e006e9e9a3227f67a9f | |
parent | ea1faa2d09693cf7f3a3c3c79a5ddb7fbd0d3ba5 (diff) |
scanner: temporarily protect against ccl overflow & overwriting.
For ccladd(), if cclp given is a non-last ccl, adding a char into it
will overflow the buffer and overwrite the first char in the next ccl.
For now, add a temporary detection and protection code. (Not sure if
this could happen in user input, but if it could, then you can expect
some "corrupted" behavior for generated scanners.)
-rw-r--r-- | src/ccl.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -73,6 +73,13 @@ void ccladd (int cclp, int ch) newpos = ind + len; + /* For a non-last cclp, expanding the set will overflow and overwrite a + * char in the next cclp. + * FIXME: Need another allocation scheme for ccl's. */ + if (cclp != lastccl) { + flexfatal(_("internal error: trying to add a char to a non-last ccl.\n")); + } + if (newpos >= current_max_ccl_tbl_size) { current_max_ccl_tbl_size += MAX_CCL_TBL_SIZE_INCREMENT; |