summaryrefslogtreecommitdiffstats
path: root/Modules/_pickle.c
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-09-29 07:40:20 (GMT)
committerGitHub <noreply@github.com>2024-09-29 07:40:20 (GMT)
commitd08c7888229e78533648191dfe42e2d2d3ecea25 (patch)
tree4b638a62a9e80d43573856ed8f081a65ae45ab8a /Modules/_pickle.c
parente0a41a5dd12cb6e9277b05abebac5c70be684dd7 (diff)
downloadcpython-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.c6
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