def test_multiple_unpicklings_unseekable(self):
self._check_multiple_unpicklings(UnseekableIO)
+ def test_unpickling_buffering_readline(self):
+ # Issue #12687: the unpickler's buffering logic could fail with
+ # text mode opcodes.
+ data = list(range(10))
+ for proto in protocols:
+ for buf_size in range(1, 11):
+ f = io.BufferedRandom(io.BytesIO(), buffer_size=buf_size)
+ pickler = self.pickler_class(f, protocol=proto)
+ pickler.dump(data)
+ f.seek(0)
+ unpickler = self.unpickler_class(f)
+ self.assertEqual(unpickler.load(), data)
+
if __name__ == "__main__":
# Print some stuff that can be used to rewrite DATA{0,1,2}
Library
-------
+- Issue #12687: Fix a possible buffering bug when unpickling text mode
+ (protocol 0, mostly) pickles.
+
- Issue #10087: Fix the html output format of the calendar module.
- Issue #12540: Prevent zombie IDLE processes on Windows due to changes
num_read = _Unpickler_ReadFromFile(self, READ_WHOLE_LINE);
if (num_read < 0)
return -1;
- *result = self->input_buffer;
self->next_read_idx = num_read;
- return num_read;
+ return _Unpickler_CopyLine(self, self->input_buffer, num_read, result);
}
/* If we get here, we've run off the end of the input string. Return the