From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Sun, 6 Oct 2024 13:34:24 +0000 (+0200) Subject: [3.12] gh-125008: Fix `tokenize.untokenize` roundtrip for `\n{{` (GH-125013) (#125021) X-Git-Tag: v3.12.8~256 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=db4b382b1faad575a0f630d71462c610661235ea;p=thirdparty%2FPython%2Fcpython.git [3.12] gh-125008: Fix `tokenize.untokenize` roundtrip for `\n{{` (GH-125013) (#125021) --- diff --git a/Lib/test/test_tokenize.py b/Lib/test/test_tokenize.py index 84741e308bff..2c4e7b960f72 100644 --- a/Lib/test/test_tokenize.py +++ b/Lib/test/test_tokenize.py @@ -1916,6 +1916,26 @@ class TestRoundtrip(TestCase): self.check_roundtrip(r"f'\\\\N{{'") self.check_roundtrip(r"f'\\\\\\N{{'") self.check_roundtrip(r"f'\\\\\\\\N{{'") + + self.check_roundtrip(r"f'\n{{foo}}'") + self.check_roundtrip(r"f'\\n{{foo}}'") + self.check_roundtrip(r"f'\\\n{{foo}}'") + self.check_roundtrip(r"f'\\\\n{{foo}}'") + + self.check_roundtrip(r"f'\t{{foo}}'") + self.check_roundtrip(r"f'\\t{{foo}}'") + self.check_roundtrip(r"f'\\\t{{foo}}'") + self.check_roundtrip(r"f'\\\\t{{foo}}'") + + self.check_roundtrip(r"rf'\t{{foo}}'") + self.check_roundtrip(r"rf'\\t{{foo}}'") + self.check_roundtrip(r"rf'\\\t{{foo}}'") + self.check_roundtrip(r"rf'\\\\t{{foo}}'") + + self.check_roundtrip(r"rf'\{{foo}}'") + self.check_roundtrip(r"f'\\{{foo}}'") + self.check_roundtrip(r"rf'\\\{{foo}}'") + self.check_roundtrip(r"f'\\\\{{foo}}'") cases = [ """ if 1: diff --git a/Lib/tokenize.py b/Lib/tokenize.py index 7af7a5cc1cd6..b2dff8e69670 100644 --- a/Lib/tokenize.py +++ b/Lib/tokenize.py @@ -202,7 +202,7 @@ class Untokenizer: characters[-2::-1] ) ) - if n_backslashes % 2 == 0: + if n_backslashes % 2 == 0 or characters[-1] != "N": characters.append(character) else: consume_until_next_bracket = True diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2024-10-05-23-53-06.gh-issue-125008.ETANpd.rst b/Misc/NEWS.d/next/Core_and_Builtins/2024-10-05-23-53-06.gh-issue-125008.ETANpd.rst new file mode 100644 index 000000000000..8971e0528602 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2024-10-05-23-53-06.gh-issue-125008.ETANpd.rst @@ -0,0 +1,2 @@ +Fix :func:`tokenize.untokenize` producing invalid syntax for +double braces preceded by certain escape characters.