Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions Lib/test/test_fstring.py
Original file line number Diff line number Diff line change
Expand Up @@ -593,6 +593,17 @@ def test_compile_time_concat_errors(self):
r"""b'' f''""",
])

def test_concat_decode_failure_does_not_crash(self):
script = r'''
import builtins
builtins.__import__ = builtins # Breaks warning machinery so _get_resized_exprs returns NULL
try:
compile('"x"f"\]"b""', '<test>', 'exec')
except Exception:
pass
'''
assert_python_ok('-c', script)

def test_literal(self):
self.assertEqual(f'', '')
self.assertEqual(f'a', 'a')
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix a crash when compiling a concatenated f-string or t-string if an error
occurs when processing one of it's parts.
6 changes: 6 additions & 0 deletions Parser/action_helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -1416,6 +1416,9 @@ expr_ty
_PyPegen_template_str(Parser *p, Token *a, asdl_expr_seq *raw_expressions, Token *b) {

asdl_expr_seq *resized_exprs = _get_resized_exprs(p, a, raw_expressions, b, TSTRING);
if (resized_exprs == NULL) {
return NULL;
}
return _PyAST_TemplateStr(resized_exprs, a->lineno, a->col_offset,
b->end_lineno, b->end_col_offset,
p->arena);
Expand All @@ -1425,6 +1428,9 @@ expr_ty
_PyPegen_joined_str(Parser *p, Token* a, asdl_expr_seq* raw_expressions, Token*b) {

asdl_expr_seq *resized_exprs = _get_resized_exprs(p, a, raw_expressions, b, FSTRING);
if (resized_exprs == NULL) {
return NULL;
}
return _PyAST_JoinedStr(resized_exprs, a->lineno, a->col_offset,
b->end_lineno, b->end_col_offset,
p->arena);
Expand Down
Loading