From: Žiga Seilnacht Date: Sun, 11 Mar 2007 16:01:51 +0000 (+0000) Subject: Patch #1675981: remove unreachable code from type.__new__() method. X-Git-Tag: v2.5.1c1~60 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ad3d2c2fe496c824292720e0c6f5265634503cb0;p=thirdparty%2FPython%2Fcpython.git Patch #1675981: remove unreachable code from type.__new__() method. __dict__ and __weakref__ are removed from the slots tuple earlier in the code, in the loop that mangles slot names. (backport from rev. 54270) --- diff --git a/Misc/NEWS b/Misc/NEWS index 7080ff7998a7..47137be18dea 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ What's New in Python 2.5.1c1? Core and builtins ----------------- +- Patch #1675981: remove unreachable code from ``type.__new__()`` method. + - Patch #1638879: don't accept strings with embedded NUL bytes in long(). - Bug #1674503: close the file opened by execfile() in an error condition. diff --git a/Objects/typeobject.c b/Objects/typeobject.c index c4a20fd5c9fb..4f2740230dd9 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1935,13 +1935,11 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) PyTuple_GET_ITEM(slots, i)); mp->type = T_OBJECT_EX; mp->offset = slotoffset; - if (base->tp_weaklistoffset == 0 && - strcmp(mp->name, "__weakref__") == 0) { - add_weak++; - mp->type = T_OBJECT; - mp->flags = READONLY; - type->tp_weaklistoffset = slotoffset; - } + + /* __dict__ and __weakref__ are already filtered out */ + assert(strcmp(mp->name, "__dict__") != 0); + assert(strcmp(mp->name, "__weakref__") != 0); + slotoffset += sizeof(PyObject *); } }