slot_tp_descr_get(): guard against NULL obj or type (bug reported by
authorGuido van Rossum <guido@python.org>
Fri, 24 Aug 2001 10:13:31 +0000 (10:13 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 24 Aug 2001 10:13:31 +0000 (10:13 +0000)
Thomas Hellor on python-dev).

slot_tp_descr_set(): if value is NULL, call __del__ instead of
__set__.

Objects/typeobject.c

index b64e10bcd4dc740ebc382dd122bacf4c71f3d41f..2017b1e46c1f254d218a0d7fbf67fa98fd9ef734 100644 (file)
@@ -2806,14 +2806,23 @@ slot_tp_descr_get(PyObject *self, PyObject *obj, PyObject *type)
                Py_INCREF(self);
                return self;
        }
+       if (obj == NULL)
+               obj = Py_None;
+       if (type == NULL)
+               type = Py_None;
        return PyObject_CallFunction(get, "OOO", self, obj, type);
 }
 
 static int
 slot_tp_descr_set(PyObject *self, PyObject *target, PyObject *value)
 {
-       PyObject *res = PyObject_CallMethod(self, "__set__",
-                                           "OO", target, value);
+       PyObject *res;
+
+       if (value == NULL)
+               res = PyObject_CallMethod(self, "__del__", "O", target);
+       else
+               res = PyObject_CallMethod(self, "__set__",
+                                         "OO", target, value);
        if (res == NULL)
                return -1;
        Py_DECREF(res);