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).
This commit is contained in:
Victor Stinner 2022-11-30 17:22:52 +01:00 committed by GitHub
parent 18a6967544
commit 85dd6cb6df
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 85 additions and 108 deletions

View file

@ -1508,15 +1508,13 @@ deque_init(dequeobject *deque, PyObject *args, PyObject *kwdargs)
static PyObject *
deque_sizeof(dequeobject *deque, void *unused)
{
Py_ssize_t res;
Py_ssize_t blocks;
res = _PyObject_SIZE(Py_TYPE(deque));
size_t res = _PyObject_SIZE(Py_TYPE(deque));
size_t blocks;
blocks = (size_t)(deque->leftindex + Py_SIZE(deque) + BLOCKLEN - 1) / BLOCKLEN;
assert(deque->leftindex + Py_SIZE(deque) - 1 ==
(blocks - 1) * BLOCKLEN + deque->rightindex);
assert(((size_t)deque->leftindex + (size_t)Py_SIZE(deque) - 1) ==
((blocks - 1) * BLOCKLEN + (size_t)deque->rightindex));
res += blocks * sizeof(block);
return PyLong_FromSsize_t(res);
return PyLong_FromSize_t(res);
}
PyDoc_STRVAR(sizeof_doc,