From: Antoine Pitrou Date: Tue, 10 Mar 2015 21:32:00 +0000 (+0100) Subject: Issue #23629: Fix the default __sizeof__ implementation for variable-sized objects. X-Git-Tag: v2.7.10rc1~134 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=323ab6d732075da2011159e037b9a304e567ae64;p=thirdparty%2FPython%2Fcpython.git Issue #23629: Fix the default __sizeof__ implementation for variable-sized objects. --- diff --git a/Misc/NEWS b/Misc/NEWS index a1ff5aa3548a..a90db8e39ab5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ What's New in Python 2.7.10? Core and Builtins ----------------- +- Issue #23629: Fix the default __sizeof__ implementation for variable-sized + objects. + - Issue #23055: Fixed a buffer overflow in PyUnicode_FromFormatV. Analysis and fix by Guido Vranken. diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index a3c185e3e6cf..5d72806959d1 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -761,27 +761,15 @@ tuple_getnewargs(PyTupleObject *v) } -static PyObject * -tuple_sizeof(PyTupleObject *self) -{ - Py_ssize_t res; - - res = PyTuple_Type.tp_basicsize + Py_SIZE(self) * sizeof(PyObject *); - return PyInt_FromSsize_t(res); -} - PyDoc_STRVAR(index_doc, "T.index(value, [start, [stop]]) -> integer -- return first index of value.\n" "Raises ValueError if the value is not present." ); PyDoc_STRVAR(count_doc, "T.count(value) -> integer -- return number of occurrences of value"); -PyDoc_STRVAR(sizeof_doc, -"T.__sizeof__() -- size of T in memory, in bytes"); static PyMethodDef tuple_methods[] = { {"__getnewargs__", (PyCFunction)tuple_getnewargs, METH_NOARGS}, - {"__sizeof__", (PyCFunction)tuple_sizeof, METH_NOARGS, sizeof_doc}, {"index", (PyCFunction)tupleindex, METH_VARARGS, index_doc}, {"count", (PyCFunction)tuplecount, METH_O, count_doc}, {NULL, NULL} /* sentinel */ diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 23dda2ac93ba..6055cd9542d1 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -3507,7 +3507,7 @@ object_sizeof(PyObject *self, PyObject *args) res = 0; isize = self->ob_type->tp_itemsize; if (isize > 0) - res = self->ob_type->ob_size * isize; + res = Py_SIZE(self) * isize; res += self->ob_type->tp_basicsize; return PyInt_FromSsize_t(res);