]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
SF bug #1155938: Missing None check for __init__().
authorRaymond Hettinger <python@rcn.com>
Thu, 3 Mar 2005 16:55:53 +0000 (16:55 +0000)
committerRaymond Hettinger <python@rcn.com>
Thu, 3 Mar 2005 16:55:53 +0000 (16:55 +0000)
Lib/test/test_descr.py
Misc/NEWS
Objects/typeobject.c

index f1abd3a503dbc2321b54224c55189cb715cc8657..26df0f2724e2c107a6fb0c9c05702cf1523c552a 100644 (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"
 
index c8ab67861d1aefaa73ba687d250c3b58341028a3..b3cabe92705dd3df28f207fac323c3587ed8a666 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.4.1?
 Core and builtins
 -----------------
 
+- Bug #1155938: new style classes did not verify that __init__()
+  returns None.
+
 - Bug #723201: Raise a TypeError for passing bad objects to 'L' format.
 
 - Bug #1124295: the __name__ attribute of file objects was
index 600dca5c93b221896aa3b619dc7fd5acd6ab76c7..6c31c73f706c14592909335ac173837b10156c5b 100644 (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;
 }