summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Galindo Salgado <Pablogsal@gmail.com>2023-11-27 18:36:11 (GMT)
committerGitHub <noreply@github.com>2023-11-27 18:36:11 (GMT)
commit2c8b19174274c183eb652932871f60570123fe99 (patch)
treeb2b7b1ad193e1aa8f8cae9b2b62437e65e71a658
parent967f2a3052c2d22e31564b428a9aa8cc63dc2a9f (diff)
downloadcpython-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.py1
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2023-11-25-22-58-49.gh-issue-112388.MU3cIM.rst2
-rw-r--r--Parser/pegen_errors.c4
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);