diff options
author | Pablo Galindo Salgado <Pablogsal@gmail.com> | 2023-11-27 18:36:11 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-27 18:36:11 (GMT) |
commit | 2c8b19174274c183eb652932871f60570123fe99 (patch) | |
tree | b2b7b1ad193e1aa8f8cae9b2b62437e65e71a658 | |
parent | 967f2a3052c2d22e31564b428a9aa8cc63dc2a9f (diff) | |
download | cpython-2c8b19174274c183eb652932871f60570123fe99.zip cpython-2c8b19174274c183eb652932871f60570123fe99.tar.gz cpython-2c8b19174274c183eb652932871f60570123fe99.tar.bz2 |
gh-112388: Fix an error that was causing the parser to try to overwrite tokenizer errors (#112410)
Signed-off-by: Pablo Galindo <pablogsal@gmail.com>
-rw-r--r-- | Lib/test/test_syntax.py | 1 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2023-11-25-22-58-49.gh-issue-112388.MU3cIM.rst | 2 | ||||
-rw-r--r-- | Parser/pegen_errors.c | 4 |
3 files changed, 7 insertions, 0 deletions
diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index f6fa649..e80e953 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -2349,6 +2349,7 @@ func( def test_invisible_characters(self): self._check_error('print\x17("Hello")', "invalid non-printable character") + self._check_error(b"with(0,,):\n\x01", "invalid non-printable character") def test_match_call_does_not_raise_syntax_error(self): code = """ diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-11-25-22-58-49.gh-issue-112388.MU3cIM.rst b/Misc/NEWS.d/next/Core and Builtins/2023-11-25-22-58-49.gh-issue-112388.MU3cIM.rst new file mode 100644 index 0000000..1c82be2 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-11-25-22-58-49.gh-issue-112388.MU3cIM.rst @@ -0,0 +1,2 @@ +Fix an error that was causing the parser to try to overwrite tokenizer +errors. Patch by pablo Galindo diff --git a/Parser/pegen_errors.c b/Parser/pegen_errors.c index e2bc3b9..2528d45 100644 --- a/Parser/pegen_errors.c +++ b/Parser/pegen_errors.c @@ -219,6 +219,10 @@ exit: void * _PyPegen_raise_error(Parser *p, PyObject *errtype, int use_mark, const char *errmsg, ...) { + // Bail out if we already have an error set. + if (p->error_indicator && PyErr_Occurred()) { + return NULL; + } if (p->fill == 0) { va_list va; va_start(va, errmsg); |