summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPablo Galindo Salgado <Pablogsal@gmail.com>2022-12-07 13:52:05 +0000
committerGitHub <noreply@github.com>2022-12-07 13:52:05 +0000
commit72cfe5b1b9ad1bbe9da38a5af605e5d03ad88147 (patch)
treed8c9df6a1732d0d14c4e91e1cc6d14a425b69a35
parent3843973cfd5267018791facb77609aff0455074b (diff)
downloadcpython-git-72cfe5b1b9ad1bbe9da38a5af605e5d03ad88147.tar.gz
[3.10] gh-100050: Fix an assertion error when raising unclosed parenthesis errors in the tokenizer (GH-100065) (#100073)
Automerge-Triggered-By: GH:pablogsal. (cherry picked from commit 97e7004cfe48305bcd642c653b406dc7470e196d) Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
-rw-r--r--Lib/test/test_syntax.py16
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2022-12-06-22-24-01.gh-issue-100050.lcrPqQ.rst2
-rw-r--r--Parser/pegen.c4
3 files changed, 22 insertions, 0 deletions
diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py
index 5f2528b904..cd09d1eabd 100644
--- a/Lib/test/test_syntax.py
+++ b/Lib/test/test_syntax.py
@@ -1587,6 +1587,22 @@ def func2():
for paren in ")]}":
self._check_error(paren + "1 + 2", f"unmatched '\\{paren}'")
+ # Some more complex examples:
+ code = """\
+func(
+ a=["unclosed], # Need a quote in this comment: "
+ b=2,
+)
+"""
+ self._check_error(code, "parenthesis '\\)' does not match opening parenthesis '\\['")
+
+ def test_error_string_literal(self):
+
+ self._check_error("'blech", "unterminated string literal")
+ self._check_error('"blech', "unterminated string literal")
+ self._check_error("'''blech", "unterminated triple-quoted string literal")
+ self._check_error('"""blech', "unterminated triple-quoted string literal")
+
def test_match_call_does_not_raise_syntax_error(self):
code = """
def match(x):
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-12-06-22-24-01.gh-issue-100050.lcrPqQ.rst b/Misc/NEWS.d/next/Core and Builtins/2022-12-06-22-24-01.gh-issue-100050.lcrPqQ.rst
new file mode 100644
index 0000000000..8e7c72d804
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-12-06-22-24-01.gh-issue-100050.lcrPqQ.rst
@@ -0,0 +1,2 @@
+Honor existing errors obtained when searching for mismatching parentheses in
+the tokenizer. Patch by Pablo Galindo
diff --git a/Parser/pegen.c b/Parser/pegen.c
index c12adedebb..95c2273e4b 100644
--- a/Parser/pegen.c
+++ b/Parser/pegen.c
@@ -1328,6 +1328,10 @@ _PyPegen_check_tokenizer_errors(Parser *p) {
const char *end;
switch (PyTokenizer_Get(p->tok, &start, &end)) {
case ERRORTOKEN:
+ if (PyErr_Occurred()) {
+ ret = -1;
+ goto exit;
+ }
if (p->tok->level != 0) {
int error_lineno = p->tok->parenlinenostack[p->tok->level-1];
if (current_err_line > error_lineno) {