From: Guido van Rossum Date: Thu, 30 Aug 2001 18:31:30 +0000 (+0000) Subject: More stuff discovered while writing the simplest of testcases: X-Git-Tag: v2.2a3~200 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4b8c0f6d7d66e2ca8f3a80d1b9ba01afee88f574;p=thirdparty%2FPython%2Fcpython.git More stuff discovered while writing the simplest of testcases: tupledealloc(): only feed the free list when the type is really a tuple, not a subtype. Otherwise, use PyObject_GC_Del(). _PyTuple_Resize(): disallow using this for tuple subtypes. --- diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 9ae732f567e3..6401dcafa218 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -146,7 +146,10 @@ tupledealloc(register PyTupleObject *op) while (--i >= 0) Py_XDECREF(op->ob_item[i]); #if MAXSAVESIZE > 0 - if (len < MAXSAVESIZE && num_free_tuples[len] < MAXSAVEDTUPLES) { + if (len < MAXSAVESIZE && + num_free_tuples[len] < MAXSAVEDTUPLES && + op->ob_type == &PyTuple_Type) + { op->ob_item[0] = (PyObject *) free_tuples[len]; num_free_tuples[len]++; free_tuples[len] = op; @@ -594,7 +597,7 @@ _PyTuple_Resize(PyObject **pv, int newsize) int sizediff; v = (PyTupleObject *) *pv; - if (v == NULL || !PyTuple_Check(v) || + if (v == NULL || v->ob_type != &PyTuple_Type || (v->ob_size != 0 && v->ob_refcnt != 1)) { *pv = 0; Py_XDECREF(v);