diff options
author | Eric V. Smith <ericvsmith@users.noreply.github.com> | 2022-06-01 23:20:06 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-01 23:20:06 (GMT) |
commit | ee70c70aa93d7a41cbe47a0b361b17f9d7ec8acd (patch) | |
tree | 330dae5f678fbfde901a60729fe3d66813d94727 | |
parent | 8a221a853787c18d5acaf46f5c449d28339cde21 (diff) | |
download | cpython-ee70c70aa93d7a41cbe47a0b361b17f9d7ec8acd.zip cpython-ee70c70aa93d7a41cbe47a0b361b17f9d7ec8acd.tar.gz cpython-ee70c70aa93d7a41cbe47a0b361b17f9d7ec8acd.tar.bz2 |
gh-93418: Fix an assert when an f-string expression is followed by an '=', but no closing brace. (gh-93419)
-rw-r--r-- | Lib/test/test_fstring.py | 1 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2022-06-01-17-47-40.gh-issue-93418.24dJuc.rst | 2 | ||||
-rw-r--r-- | Parser/string_parser.c | 4 |
3 files changed, 6 insertions, 1 deletions
diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py index e8bf420..9815b7c 100644 --- a/Lib/test/test_fstring.py +++ b/Lib/test/test_fstring.py @@ -1084,6 +1084,7 @@ x = ( "f'{'", "f'x{<'", # See bpo-46762. "f'x{>'", + "f'{i='", # See gh-93418. ]) # But these are just normal strings. diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-06-01-17-47-40.gh-issue-93418.24dJuc.rst b/Misc/NEWS.d/next/Core and Builtins/2022-06-01-17-47-40.gh-issue-93418.24dJuc.rst new file mode 100644 index 0000000..74ad06b --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2022-06-01-17-47-40.gh-issue-93418.24dJuc.rst @@ -0,0 +1,2 @@ +Fixed an assert where an f-string has an equal sign '=' following an +expression, but there's no trailing brace. For example, f"{i=". diff --git a/Parser/string_parser.c b/Parser/string_parser.c index c56ed20..984c05d 100644 --- a/Parser/string_parser.c +++ b/Parser/string_parser.c @@ -756,7 +756,9 @@ fstring_find_expr(Parser *p, const char **str, const char *end, int raw, int rec while (Py_ISSPACE(**str)) { *str += 1; } - + if (*str >= end) { + goto unexpected_end_of_string; + } /* Set *expr_text to the text of the expression. */ *expr_text = PyUnicode_FromStringAndSize(expr_start, *str-expr_start); if (!*expr_text) { |