diff options
-rw-r--r-- | Lib/test/pickletester.py | 35 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2018-04-03-10-37-13.bpo-33209.9sGWE_.rst | 1 | ||||
-rw-r--r-- | Modules/_pickle.c | 5 |
3 files changed, 22 insertions, 19 deletions
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py index b84b87861d..71c2feadb6 100644 --- a/Lib/test/pickletester.py +++ b/Lib/test/pickletester.py @@ -2781,29 +2781,30 @@ class AbstractPicklerUnpicklerObjectTests(unittest.TestCase): # object again, the third serialized form should be identical to the # first one we obtained. data = ["abcdefg", "abcdefg", 44] - f = io.BytesIO() - pickler = self.pickler_class(f) + for proto in protocols: + f = io.BytesIO() + pickler = self.pickler_class(f, proto) - pickler.dump(data) - first_pickled = f.getvalue() + pickler.dump(data) + first_pickled = f.getvalue() - # Reset BytesIO object. - f.seek(0) - f.truncate() + # Reset BytesIO object. + f.seek(0) + f.truncate() - pickler.dump(data) - second_pickled = f.getvalue() + pickler.dump(data) + second_pickled = f.getvalue() - # Reset the Pickler and BytesIO objects. - pickler.clear_memo() - f.seek(0) - f.truncate() + # Reset the Pickler and BytesIO objects. + pickler.clear_memo() + f.seek(0) + f.truncate() - pickler.dump(data) - third_pickled = f.getvalue() + pickler.dump(data) + third_pickled = f.getvalue() - self.assertNotEqual(first_pickled, second_pickled) - self.assertEqual(first_pickled, third_pickled) + self.assertNotEqual(first_pickled, second_pickled) + self.assertEqual(first_pickled, third_pickled) def test_priming_pickler_memo(self): # Verify that we can set the Pickler's memo attribute. diff --git a/Misc/NEWS.d/next/Library/2018-04-03-10-37-13.bpo-33209.9sGWE_.rst b/Misc/NEWS.d/next/Library/2018-04-03-10-37-13.bpo-33209.9sGWE_.rst new file mode 100644 index 0000000000..d98b1e174e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-04-03-10-37-13.bpo-33209.9sGWE_.rst @@ -0,0 +1 @@ +End framing at the end of C implementation of :func:`pickle.Pickler.dump`. diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 9525ad6d96..6a684f25fe 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -4152,9 +4152,10 @@ dump(PicklerObject *self, PyObject *obj) } if (save(self, obj, 0) < 0 || - _Pickler_Write(self, &stop_op, 1) < 0) + _Pickler_Write(self, &stop_op, 1) < 0 || + _Pickler_CommitFrame(self) < 0) return -1; - + self->framing = 0; return 0; } |