]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-113703: Correctly identify incomplete f-strings in the codeop module (#113709)
authorPablo Galindo Salgado <Pablogsal@gmail.com>
Fri, 5 Jan 2024 12:16:46 +0000 (12:16 +0000)
committerGitHub <noreply@github.com>
Fri, 5 Jan 2024 12:16:46 +0000 (12:16 +0000)
Lib/test/test_codeop.py
Misc/NEWS.d/next/Core and Builtins/2024-01-04-17-15-30.gh-issue-113703.Zsk0pY.rst [new file with mode: 0644]
Parser/lexer/lexer.c

index 2abb6c6d935b7e7653543289c6e704047eb9bc12..787bd1b6a79e20b8df91ab36a425ff1eb96eb591 100644 (file)
@@ -223,6 +223,9 @@ class CodeopTests(unittest.TestCase):
         ai("(x for x in")
         ai("(x for x in (")
 
+        ai('a = f"""')
+        ai('a = \\')
+
     def test_invalid(self):
         ai = self.assertInvalid
         ai("a b")
diff --git a/Misc/NEWS.d/next/Core and Builtins/2024-01-04-17-15-30.gh-issue-113703.Zsk0pY.rst b/Misc/NEWS.d/next/Core and Builtins/2024-01-04-17-15-30.gh-issue-113703.Zsk0pY.rst
new file mode 100644 (file)
index 0000000..5db93e3
--- /dev/null
@@ -0,0 +1,2 @@
+Fix a regression in the :mod:`codeop` module that was causing it to incorrectly
+identify incomplete f-strings. Patch by Pablo Galindo
index ea4bdf7ce4a24c1eb99d08da016417cb99f9facd..ebf7686773ff45ca9d1adecb53905611ba437047 100644 (file)
@@ -1355,9 +1355,13 @@ f_string_middle:
             tok->lineno = the_current_tok->f_string_line_start;
 
             if (current_tok->f_string_quote_size == 3) {
-                return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok,
+                _PyTokenizer_syntaxerror(tok,
                                     "unterminated triple-quoted f-string literal"
-                                    " (detected at line %d)", start));
+                                    " (detected at line %d)", start);
+                if (c != '\n') {
+                    tok->done = E_EOFS;
+                }
+                return MAKE_TOKEN(ERRORTOKEN);
             }
             else {
                 return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok,