Commit dd52c5a1 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Merge heads

parents 6787a380 6188d09f
...@@ -353,6 +353,7 @@ class RangeTest(unittest.TestCase): ...@@ -353,6 +353,7 @@ class RangeTest(unittest.TestCase):
(13, 21, 3), (-2, 2, 2), (2**65, 2**65+2)] (13, 21, 3), (-2, 2, 2), (2**65, 2**65+2)]
for proto in range(pickle.HIGHEST_PROTOCOL + 1): for proto in range(pickle.HIGHEST_PROTOCOL + 1):
for t in testcases: for t in testcases:
with self.subTest(proto=proto, test=t):
r = range(*t) r = range(*t)
self.assertEqual(list(pickle.loads(pickle.dumps(r, proto))), self.assertEqual(list(pickle.loads(pickle.dumps(r, proto))),
list(r)) list(r))
......
...@@ -699,18 +699,28 @@ _Pickler_ClearBuffer(PicklerObject *self) ...@@ -699,18 +699,28 @@ _Pickler_ClearBuffer(PicklerObject *self)
return 0; return 0;
} }
static void
_write_size64(char *out, size_t value)
{
out[0] = (unsigned char)(value & 0xff);
out[1] = (unsigned char)((value >> 8) & 0xff);
out[2] = (unsigned char)((value >> 16) & 0xff);
out[3] = (unsigned char)((value >> 24) & 0xff);
#if SIZEOF_SIZE_T >= 8
out[4] = (unsigned char)((value >> 32) & 0xff);
out[5] = (unsigned char)((value >> 40) & 0xff);
out[6] = (unsigned char)((value >> 48) & 0xff);
out[7] = (unsigned char)((value >> 56) & 0xff);
#else
out[4] = out[5] = out[6] = out[7] = 0;
#endif
}
static void static void
_Pickler_WriteFrameHeader(PicklerObject *self, char *qdata, size_t frame_len) _Pickler_WriteFrameHeader(PicklerObject *self, char *qdata, size_t frame_len)
{ {
qdata[0] = (unsigned char)FRAME; qdata[0] = FRAME;
qdata[1] = (unsigned char)(frame_len & 0xff); _write_size64(qdata + 1, frame_len);
qdata[2] = (unsigned char)((frame_len >> 8) & 0xff);
qdata[3] = (unsigned char)((frame_len >> 16) & 0xff);
qdata[4] = (unsigned char)((frame_len >> 24) & 0xff);
qdata[5] = (unsigned char)((frame_len >> 32) & 0xff);
qdata[6] = (unsigned char)((frame_len >> 40) & 0xff);
qdata[7] = (unsigned char)((frame_len >> 48) & 0xff);
qdata[8] = (unsigned char)((frame_len >> 56) & 0xff);
} }
static int static int
...@@ -2017,7 +2027,7 @@ save_bytes(PicklerObject *self, PyObject *obj) ...@@ -2017,7 +2027,7 @@ save_bytes(PicklerObject *self, PyObject *obj)
int i; int i;
header[0] = BINBYTES8; header[0] = BINBYTES8;
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
header[i+1] = (unsigned char)((size >> (8 * i)) & 0xff); _write_size64(header + 1, size);
} }
len = 8; len = 8;
} }
...@@ -2131,7 +2141,7 @@ write_utf8(PicklerObject *self, char *data, Py_ssize_t size) ...@@ -2131,7 +2141,7 @@ write_utf8(PicklerObject *self, char *data, Py_ssize_t size)
header[0] = BINUNICODE8; header[0] = BINUNICODE8;
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
header[i+1] = (unsigned char)((size >> (8 * i)) & 0xff); _write_size64(header + 1, size);
} }
len = 9; len = 9;
} }
...@@ -2940,6 +2950,9 @@ save_frozenset(PicklerObject *self, PyObject *obj) ...@@ -2940,6 +2950,9 @@ save_frozenset(PicklerObject *self, PyObject *obj)
return -1; return -1;
iter = PyObject_GetIter(obj); iter = PyObject_GetIter(obj);
if (iter == NULL) {
return -1;
}
for (;;) { for (;;) {
PyObject *item; PyObject *item;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment