[Python-checkins] [3.12] gh-107967: Fix infinite recursion on invalid escape sequence warning (GH-107968) (#107970)

pablogsal webhook-mailer at python.org
Tue Aug 15 08:41:59 EDT 2023


https://github.com/python/cpython/commit/d189480942348aab345500ac9204965f67f30210
commit: d189480942348aab345500ac9204965f67f30210
branch: 3.12
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: pablogsal <Pablogsal at gmail.com>
date: 2023-08-15T13:41:55+01:00
summary:

[3.12] gh-107967: Fix infinite recursion on invalid escape sequence warning (GH-107968) (#107970)

gh-107967: Fix infinite recursion on invalid escape sequence warning (GH-107968)
(cherry picked from commit d66bc9e8a7a8d6774d912a4b9d151885c4d8de1d)

Co-authored-by: Lysandros Nikolaou <lisandrosnik at gmail.com>

files:
M Lib/test/test_fstring.py
M Parser/tokenizer.c

diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py
index cb14bba2602de..16f01973f99f3 100644
--- a/Lib/test/test_fstring.py
+++ b/Lib/test/test_fstring.py
@@ -1673,5 +1673,15 @@ def test_debug_in_file(self):
         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()
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index 7e246d2f56481..c4c345e4c358e 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -1544,6 +1544,9 @@ parser_warn(struct tok_state *tok, PyObject *category, const char *format, ...)
 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'",



More information about the Python-checkins mailing list