diff options
author | Stéphane Wirtel <stephane@wirtel.be> | 2019-02-21 11:11:53 +0100 |
---|---|---|
committer | Pablo Galindo <Pablogsal@gmail.com> | 2019-02-21 10:11:53 +0000 |
commit | 3ad91673057d410bf9f8c53df6bb8aa18c4b68ca (patch) | |
tree | ca2e9969eec7990a9a91061e5b2814a08aee5dd5 | |
parent | ea6207d593832fe50dbca39e94c138abbd5d266d (diff) | |
download | cpython-git-3ad91673057d410bf9f8c53df6bb8aa18c4b68ca.tar.gz |
bpo-36052: Raise a SyntaxError when assigning a value to __debug__ with := (GH-11958)
Trying to assign a value to __debug__ using the assignment operator is supposed to fail, but
a missing check for forbidden names when setting the context in the ast was preventing this behaviour.
-rw-r--r-- | Lib/test/test_syntax.py | 4 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2019-02-20-17-57-31.bpo-36052.l8lJSi.rst | 2 | ||||
-rw-r--r-- | Python/ast.c | 2 |
3 files changed, 7 insertions, 1 deletions
diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index ce1de4b319..a0f487d4ed 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -51,6 +51,10 @@ SyntaxError: cannot assign to __debug__ Traceback (most recent call last): SyntaxError: cannot assign to __debug__ +>>> (__debug__ := 1) +Traceback (most recent call last): +SyntaxError: cannot assign to __debug__ + >>> f() = 1 Traceback (most recent call last): SyntaxError: cannot assign to function call diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-02-20-17-57-31.bpo-36052.l8lJSi.rst b/Misc/NEWS.d/next/Core and Builtins/2019-02-20-17-57-31.bpo-36052.l8lJSi.rst new file mode 100644 index 0000000000..1d2094895d --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-02-20-17-57-31.bpo-36052.l8lJSi.rst @@ -0,0 +1,2 @@ +Raise a :exc:`SyntaxError` when assigning a value to `__debug__` with the +Assignment Operator. Contributed by Stéphane Wirtel and Pablo Galindo. diff --git a/Python/ast.c b/Python/ast.c index e721ac1c0a..62ff868de5 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -1084,7 +1084,7 @@ set_context(struct compiling *c, expr_ty e, expr_context_ty ctx, const node *n) return 0; break; case Name_kind: - if (ctx == Store) { + if (ctx == Store || ctx == NamedStore) { if (forbidden_name(c, e->v.Name.id, n, 0)) return 0; /* forbidden_name() calls ast_error() */ } |