From: Shantanu Date: Sat, 6 Jun 2020 10:08:48 +0000 (-0700) Subject: bpo-40614: Respect feature version for f-string debug expressions (GH-20196) (GH... X-Git-Tag: v3.8.4rc1~64 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f7ed4d4e83f5d9e85e244a1cbc460f26436ab24d;p=thirdparty%2FPython%2Fcpython.git bpo-40614: Respect feature version for f-string debug expressions (GH-20196) (GH-20466) Co-authored-by: Lysandros Nikolaou Co-authored-by: Pablo Galindo (cherry picked from commit c116c94ff119485761460f1033cdee425bed0310) --- diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index 486f2aa707e8..869346664499 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -630,6 +630,12 @@ class AST_Tests(unittest.TestCase): attr_b = tree.body[0].decorator_list[0].value self.assertEqual(attr_b.end_col_offset, 4) + def test_issue40614_feature_version(self): + ast.parse('f"{x=}"', feature_version=(3, 8)) + with self.assertRaises(SyntaxError): + ast.parse('f"{x=}"', feature_version=(3, 7)) + + class ASTHelpers_Test(unittest.TestCase): maxDiff = None diff --git a/Misc/NEWS.d/next/Library/2020-05-18-22-41-02.bpo-40614.8j3kmq.rst b/Misc/NEWS.d/next/Library/2020-05-18-22-41-02.bpo-40614.8j3kmq.rst new file mode 100644 index 000000000000..238b98c14a32 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-05-18-22-41-02.bpo-40614.8j3kmq.rst @@ -0,0 +1 @@ +:func:`ast.parse` will not parse self documenting expressions in f-strings when passed ``feature_version`` is less than ``(3, 8)``. diff --git a/Python/ast.c b/Python/ast.c index f70d48ba3a15..594879bd0ef0 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -5202,6 +5202,12 @@ fstring_find_expr(const char **str, const char *end, int raw, int recurse_lvl, /* Check for =, which puts the text value of the expression in expr_text. */ if (**str == '=') { + if (c->c_feature_version < 8) { + ast_error(c, n, + "f-string: self documenting expressions are " + "only supported in Python 3.8 and greater"); + goto error; + } *str += 1; /* Skip over ASCII whitespace. No need to test for end of string