]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-107967: Fix infinite recursion on invalid escape sequence warning (#107968)
authorLysandros Nikolaou <lisandrosnik@gmail.com>
Tue, 15 Aug 2023 11:26:42 +0000 (14:26 +0300)
committerGitHub <noreply@github.com>
Tue, 15 Aug 2023 11:26:42 +0000 (11:26 +0000)
Lib/test/test_fstring.py
Parser/tokenizer.c

index cb14bba2602defcb7821408e863efa351f17566c..16f01973f99f3e632fa45728d2559e997dca925a 100644 (file)
@@ -1673,5 +1673,15 @@ print(f'''{{
         self.assertEqual(stdout.decode('utf-8').strip().replace('\r\n', '\n').replace('\r', '\n'),
                          "3\n=3")
 
+    def test_syntax_warning_infinite_recursion_in_file(self):
+        with temp_cwd():
+            script = 'script.py'
+            with open(script, 'w') as f:
+                f.write(r"print(f'\{1}')")
+
+            _, stdout, stderr = assert_python_ok(script)
+            self.assertIn(rb'\1', stdout)
+            self.assertEqual(len(stderr.strip().splitlines()), 2)
+
 if __name__ == '__main__':
     unittest.main()
index 5a42f6f357317f451f3ee76082df5b879c96a703..b10c9f1f8ea2ccbec1632f520c90463026585fae 100644 (file)
@@ -1539,6 +1539,9 @@ error:
 static int
 warn_invalid_escape_sequence(struct tok_state *tok, int first_invalid_escape_char)
 {
+    if (!tok->report_warnings) {
+        return 0;
+    }
 
     PyObject *msg = PyUnicode_FromFormat(
         "invalid escape sequence '\\%c'",