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:
parent
734c7fb131
commit
778e265462
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue