Skip to content

Commit

Permalink
gh-103824: fix use-after-free error in Parser/tokenizer.c (#103993)
Browse files Browse the repository at this point in the history
  • Loading branch information
chgnrdv committed May 1, 2023
1 parent 99aab61 commit d5a9707
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
15 changes: 14 additions & 1 deletion Lib/test/test_tokenize.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from test.test_grammar import (VALID_UNDERSCORE_LITERALS,
INVALID_UNDERSCORE_LITERALS)
from test.support import os_helper
from test.support.script_helper import run_test_script, make_script
from test.support.script_helper import run_test_script, make_script, run_python_until_end
import os
import token

Expand Down Expand Up @@ -1470,6 +1470,19 @@ def test_comment_at_the_end_of_the_source_without_newline(self):
self.assertEqual(tok_name[tokens[i + 1].exact_type], tok_name[expected_tokens[i]])
self.assertEqual(tok_name[tokens[-1].exact_type], tok_name[token.ENDMARKER])

def test_invalid_character_in_fstring_middle(self):
# See gh-103824
script = b'''F"""
\xe5"""'''

with os_helper.temp_dir() as temp_dir:
filename = os.path.join(temp_dir, "script.py")
with open(filename, 'wb') as file:
file.write(script)
rs, _ = run_python_until_end(filename)
self.assertIn(b"SyntaxError", rs.err)


class UntokenizeTest(TestCase):

def test_bad_input_order(self):
Expand Down
4 changes: 4 additions & 0 deletions Parser/tokenizer.c
Original file line number Diff line number Diff line change
Expand Up @@ -2552,6 +2552,10 @@ tok_get_fstring_mode(struct tok_state *tok, tokenizer_mode* current_tok, struct
while (end_quote_size != current_tok->f_string_quote_size) {
int c = tok_nextc(tok);
if (c == EOF || (current_tok->f_string_quote_size == 1 && c == '\n')) {
if (tok->decoding_erred) {
return MAKE_TOKEN(ERRORTOKEN);
}

assert(tok->multi_line_start != NULL);
// shift the tok_state's location into
// the start of string, and report the error
Expand Down

0 comments on commit d5a9707

Please sign in to comment.