[Python-checkins] gh-93418: Fix an assert when an f-string expression is followed by an '=', but no closing brace. (gh-93419)
ericvsmith
webhook-mailer at python.org
Wed Jun 1 19:20:10 EDT 2022
https://github.com/python/cpython/commit/ee70c70aa93d7a41cbe47a0b361b17f9d7ec8acd
commit: ee70c70aa93d7a41cbe47a0b361b17f9d7ec8acd
branch: main
author: Eric V. Smith <ericvsmith at users.noreply.github.com>
committer: ericvsmith <ericvsmith at users.noreply.github.com>
date: 2022-06-01T19:20:06-04:00
summary:
gh-93418: Fix an assert when an f-string expression is followed by an '=', but no closing brace. (gh-93419)
files:
A Misc/NEWS.d/next/Core and Builtins/2022-06-01-17-47-40.gh-issue-93418.24dJuc.rst
M Lib/test/test_fstring.py
M Parser/string_parser.c
diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py
index e8bf420d699ed..9815b7c28f2f4 100644
--- a/Lib/test/test_fstring.py
+++ b/Lib/test/test_fstring.py
@@ -1084,6 +1084,7 @@ def test_mismatched_braces(self):
"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 0000000000000..74ad06bfeee7c
--- /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 c56ed20ad4cfc..984c05d39c1a1 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) {
More information about the Python-checkins
mailing list