diff options
author | Guido van Rossum <guido@python.org> | 2001-12-04 17:13:22 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2001-12-04 17:13:22 (GMT) |
commit | 64b206c19e764d12f61681359544938c45912262 (patch) | |
tree | 2165d27367e6cde216f1929d0ab97680f07a3550 | |
parent | bb7775a6aebb00d85a2ecd7c2d907c8abbf98446 (diff) | |
download | cpython-64b206c19e764d12f61681359544938c45912262.zip cpython-64b206c19e764d12f61681359544938c45912262.tar.gz cpython-64b206c19e764d12f61681359544938c45912262.tar.bz2 |
Fix SF bug #486144: Uninitialized __slot__ vrbl is None.
There's now a new structmember code, T_OBJECT_EX, which is used for
all __slot__ variables (except __weakref__, which has special behavior
anyway). This new code raises AttributeError when the variable is
NULL rather than converting NULL to None.
-rw-r--r-- | Objects/typeobject.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 6fc5d02..16591cf 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1059,11 +1059,13 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) for (i = 0; i < nslots; i++, mp++) { mp->name = PyString_AS_STRING( PyTuple_GET_ITEM(slots, i)); - mp->type = T_OBJECT; + mp->type = T_OBJECT_EX; mp->offset = slotoffset; if (base->tp_weaklistoffset == 0 && - strcmp(mp->name, "__weakref__") == 0) + strcmp(mp->name, "__weakref__") == 0) { + mp->type = T_OBJECT; type->tp_weaklistoffset = slotoffset; + } slotoffset += sizeof(PyObject *); } } |