diff options
author | Pablo Galindo Salgado <Pablogsal@gmail.com> | 2022-12-07 13:52:05 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-07 13:52:05 +0000 |
commit | 72cfe5b1b9ad1bbe9da38a5af605e5d03ad88147 (patch) | |
tree | d8c9df6a1732d0d14c4e91e1cc6d14a425b69a35 | |
parent | 3843973cfd5267018791facb77609aff0455074b (diff) | |
download | cpython-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.py | 16 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2022-12-06-22-24-01.gh-issue-100050.lcrPqQ.rst | 2 | ||||
-rw-r--r-- | Parser/pegen.c | 4 |
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) { |