diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2024-09-29 07:40:20 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-29 07:40:20 (GMT) |
commit | d08c7888229e78533648191dfe42e2d2d3ecea25 (patch) | |
tree | 4b638a62a9e80d43573856ed8f081a65ae45ab8a /Modules/_pickle.c | |
parent | e0a41a5dd12cb6e9277b05abebac5c70be684dd7 (diff) | |
download | cpython-d08c7888229e78533648191dfe42e2d2d3ecea25.zip cpython-d08c7888229e78533648191dfe42e2d2d3ecea25.tar.gz cpython-d08c7888229e78533648191dfe42e2d2d3ecea25.tar.bz2 |
gh-123497: New limit for Python integers on 64-bit platforms (GH-123724)
Instead of be limited just by the size of addressable memory (2**63
bytes), Python integers are now also limited by the number of bits, so
the number of bit now always fit in a 64-bit integer.
Both limits are much larger than what might be available in practice,
so it doesn't affect users.
_PyLong_NumBits() and _PyLong_Frexp() are now always successful.
Diffstat (limited to 'Modules/_pickle.c')
-rw-r--r-- | Modules/_pickle.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 18affdd..b2bd954 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -2146,7 +2146,7 @@ save_long(PicklerObject *self, PyObject *obj) if (self->proto >= 2) { /* Linear-time pickling. */ - uint64_t nbits; + int64_t nbits; size_t nbytes; unsigned char *pdata; char header[5]; @@ -2161,8 +2161,8 @@ save_long(PicklerObject *self, PyObject *obj) return 0; } nbits = _PyLong_NumBits(obj); - if (nbits == (uint64_t)-1 && PyErr_Occurred()) - goto error; + assert(nbits >= 0); + assert(!PyErr_Occurred()); /* How many bytes do we need? There are nbits >> 3 full * bytes of data, and nbits & 7 leftover bits. If there * are any leftover bits, then we clearly need another |