Fix SF buf #480096: Assign to __debug__ still allowed

Easy enough to catch assignment in the compiler.  The perverse user
can still change the value of __debug__, but that may be the least he
can do.
This commit is contained in:
Jeremy Hylton 2001-11-09 19:50:08 +00:00
parent 734c7fb131
commit 778e265462
2 changed files with 20 additions and 3 deletions

View File

@ -1,5 +1,16 @@
from test_support import verbose, TestFailed
if verbose:
print "Testing whether compiler catches assignment to __debug__"
try:
compile('__debug__ = 1', '?', 'single')
except SyntaxError:
pass
import __builtin__
setattr(__builtin__, '__debug__', 'sure')
if verbose:
print 'Running tests on argument handling'
@ -21,7 +32,8 @@ try:
except SyntaxError:
pass
print "testing complex args"
if verbose:
print "testing complex args"
def comp_args((a, b)):
print a,b

View File

@ -5459,8 +5459,13 @@ symtable_assign(struct symtable *st, node *n, int def_flag)
n = CHILD(n, 1);
goto loop;
} else if (TYPE(tmp) == NAME) {
if (strcmp(STR(tmp), "__debug__") == 0)
symtable_warn(st, ASSIGN_DEBUG);
if (strcmp(STR(tmp), "__debug__") == 0) {
PyErr_SetString(PyExc_SyntaxError,
ASSIGN_DEBUG);
PyErr_SyntaxLocation(st->st_filename,
st->st_cur->ste_opt_lineno);
st->st_errors++;
}
symtable_add_def(st, STR(tmp), DEF_LOCAL | def_flag);
}
return;