cpython: ea0c4b811eae (original) (raw)

Mercurial > cpython

changeset 99137:ea0c4b811eae

Issue #25388: Fixed tokenizer crash when processing undecodable source code with a null byte. [#25388]

Serhiy Storchaka storchaka@gmail.com
date Sat, 14 Nov 2015 15:12:04 +0200
parents 25a7ceed79d1(current diff)e4a69eb34ad7(diff)
children 1412be96faf0
files Misc/NEWS Parser/tokenizer.c
diffstat 3 files changed, 19 insertions(+), 8 deletions(-)[+] [-] Lib/test/test_compile.py 10 Misc/NEWS 3 Parser/tokenizer.c 14

line wrap: on

line diff

--- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -516,6 +516,16 @@ if 1: res = script_helper.run_python_until_end(fn)[0] self.assertIn(b"Non-UTF-8", res.err)

+ @support.cpython_only def test_compiler_recursion_limit(self): # Expected limit is sys.getrecursionlimit() * the scaling factor

--- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ Release date: XXXX-XX-XX Core and Builtins ----------------- +- Issue #25388: Fixed tokenizer crash when processing undecodable source code

--- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -196,7 +196,8 @@ error_ret(struct tok_state tok) / XXX tok->decoding_erred = 1; if (tok->fp != NULL && tok->buf != NULL) /* see PyTokenizer_Free */ PyMem_FREE(tok->buf);

@@ -952,11 +953,6 @@ tok_nextc(struct tok_state *tok) } buflen = PyBytes_GET_SIZE(u); buf = PyBytes_AS_STRING(u);

@@ -998,7 +994,6 @@ tok_nextc(struct tok_state *tok) if (tok->buf != NULL) PyMem_FREE(tok->buf); tok->buf = newtok;

@@ -1021,7 +1016,8 @@ tok_nextc(struct tok_state *tok) } if (decoding_fgets(tok->buf, (int)(tok->end - tok->buf), tok) == NULL) {

@@ -1055,6 +1051,8 @@ tok_nextc(struct tok_state *tok) return EOF; } tok->buf = newbuf;