]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-100050: Fix an assertion error when raising unclosed parenthesis errors in the...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 7 Dec 2022 09:18:00 +0000 (01:18 -0800)
committerGitHub <noreply@github.com>
Wed, 7 Dec 2022 09:18:00 +0000 (01:18 -0800)
(cherry picked from commit 97e7004cfe48305bcd642c653b406dc7470e196d)

Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
Automerge-Triggered-By: GH:pablogsal
Lib/test/test_syntax.py
Misc/NEWS.d/next/Core and Builtins/2022-12-06-22-24-01.gh-issue-100050.lcrPqQ.rst [new file with mode: 0644]
Parser/pegen_errors.c

index 400092ee2c896f05a03aeb053dd5ad696281c1bd..42d36e0b9d81bb1560db9a3f370e01a75ecd92ee 100644 (file)
@@ -2095,6 +2095,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_invisible_characters(self):
         self._check_error('print\x17("Hello")', "invalid non-printable character")
 
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 (file)
index 0000000..8e7c72d
--- /dev/null
@@ -0,0 +1,2 @@
+Honor existing errors obtained when searching for mismatching parentheses in
+the tokenizer. Patch by Pablo Galindo
index a0f4b9809e21a752aa1cbd24856b1aa61159b332..3d8cccb0a9749c6f54016b46d67f0f5765f2f8c0 100644 (file)
@@ -170,6 +170,10 @@ _PyPegen_tokenize_full_source_to_check_for_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) {