SF bug #1155938: Missing None check for __init__().

This commit is contained in:
Raymond Hettinger 2005-03-03 16:45:19 +00:00
parent 6ce7ed23d0
commit b67cc80bb9
3 changed files with 22 additions and 0 deletions

View File

@ -3965,6 +3965,18 @@ def vicious_descriptor_nonsense():
import gc; gc.collect()
vereq(hasattr(c, 'attr'), False)
def test_init():
# SF 1155938
class Foo(object):
def __init__(self):
return 10
try:
Foo()
except TypeError:
pass
else:
raise TestFailed, "did not test __init__() for None return"
def test_main():
weakref_segfault() # Must be first, somehow
@ -4058,6 +4070,7 @@ def test_main():
carloverre()
filefault()
vicious_descriptor_nonsense()
test_init()
if verbose: print "All OK"

View File

@ -10,6 +10,9 @@ What's New in Python 2.5 alpha 1?
Core and builtins
-----------------
- Bug #1155938: new style classes did not check that __init__() was
returning None.
- Patch #802188: Report characters after line continuation character
('\') with a specific error message.

View File

@ -4753,6 +4753,12 @@ slot_tp_init(PyObject *self, PyObject *args, PyObject *kwds)
Py_DECREF(meth);
if (res == NULL)
return -1;
if (res != Py_None) {
PyErr_SetString(PyExc_TypeError,
"__init__() should return None");
Py_DECREF(res);
return -1;
}
Py_DECREF(res);
return 0;
}