summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-11-30 16:22:52 (GMT)
committerGitHub <noreply@github.com>2022-11-30 16:22:52 (GMT)
commit85dd6cb6df996b1197266d1a50ecc9187a91e481 (patch)
tree774e93130f5e1b81dcd7a94982c189c718e84b91 /Objects
parent18a6967544795cdcce45b45700b7a9ed3994b8fb (diff)
downloadcpython-85dd6cb6df996b1197266d1a50ecc9187a91e481.zip
cpython-85dd6cb6df996b1197266d1a50ecc9187a91e481.tar.gz
cpython-85dd6cb6df996b1197266d1a50ecc9187a91e481.tar.bz2
gh-99845: Use size_t type in __sizeof__() methods (#99846)
The implementation of __sizeof__() methods using _PyObject_SIZE() now use an unsigned type (size_t) to compute the size, rather than a signed type (Py_ssize_t). Cast explicitly signed (Py_ssize_t) values to unsigned type (Py_ssize_t).
Diffstat (limited to 'Objects')
-rw-r--r--Objects/bytearrayobject.c7
-rw-r--r--Objects/listobject.c7
-rw-r--r--Objects/setobject.c11
3 files changed, 11 insertions, 14 deletions
diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c
index 0ba6fb5..f24690a 100644
--- a/Objects/bytearrayobject.c
+++ b/Objects/bytearrayobject.c
@@ -2151,10 +2151,9 @@ static PyObject *
bytearray_sizeof_impl(PyByteArrayObject *self)
/*[clinic end generated code: output=738abdd17951c427 input=e27320fd98a4bc5a]*/
{
- Py_ssize_t res;
-
- res = _PyObject_SIZE(Py_TYPE(self)) + self->ob_alloc * sizeof(char);
- return PyLong_FromSsize_t(res);
+ size_t res = _PyObject_SIZE(Py_TYPE(self));
+ res += (size_t)self->ob_alloc * sizeof(char);
+ return PyLong_FromSize_t(res);
}
static PySequenceMethods bytearray_as_sequence = {
diff --git a/Objects/listobject.c b/Objects/listobject.c
index da623c9..0e696fb 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -2806,10 +2806,9 @@ static PyObject *
list___sizeof___impl(PyListObject *self)
/*[clinic end generated code: output=3417541f95f9a53e input=b8030a5d5ce8a187]*/
{
- Py_ssize_t res;
-
- res = _PyObject_SIZE(Py_TYPE(self)) + self->allocated * sizeof(void*);
- return PyLong_FromSsize_t(res);
+ size_t res = _PyObject_SIZE(Py_TYPE(self));
+ res += (size_t)self->allocated * sizeof(void*);
+ return PyLong_FromSize_t(res);
}
static PyObject *list_iter(PyObject *seq);
diff --git a/Objects/setobject.c b/Objects/setobject.c
index ae9e9b9..fcdda2a 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -1957,12 +1957,11 @@ done:
static PyObject *
set_sizeof(PySetObject *so, PyObject *Py_UNUSED(ignored))
{
- Py_ssize_t res;
-
- res = _PyObject_SIZE(Py_TYPE(so));
- if (so->table != so->smalltable)
- res = res + (so->mask + 1) * sizeof(setentry);
- return PyLong_FromSsize_t(res);
+ size_t res = _PyObject_SIZE(Py_TYPE(so));
+ if (so->table != so->smalltable) {
+ res += ((size_t)so->mask + 1) * sizeof(setentry);
+ }
+ return PyLong_FromSize_t(res);
}
PyDoc_STRVAR(sizeof_doc, "S.__sizeof__() -> size of S in memory, in bytes");