mirror of
https://github.com/python/cpython.git
synced 2025-10-01 12:52:18 +00:00
bpo-33209: End framing at the end of C implementation of pickle.Pickler.dump(). (GH-6366)
(cherry picked from commit c869529ea9
)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
0c533573c5
commit
74735e2a40
3 changed files with 22 additions and 19 deletions
|
@ -2781,29 +2781,30 @@ class AbstractPicklerUnpicklerObjectTests(unittest.TestCase):
|
||||||
# object again, the third serialized form should be identical to the
|
# object again, the third serialized form should be identical to the
|
||||||
# first one we obtained.
|
# first one we obtained.
|
||||||
data = ["abcdefg", "abcdefg", 44]
|
data = ["abcdefg", "abcdefg", 44]
|
||||||
f = io.BytesIO()
|
for proto in protocols:
|
||||||
pickler = self.pickler_class(f)
|
f = io.BytesIO()
|
||||||
|
pickler = self.pickler_class(f, proto)
|
||||||
|
|
||||||
pickler.dump(data)
|
pickler.dump(data)
|
||||||
first_pickled = f.getvalue()
|
first_pickled = f.getvalue()
|
||||||
|
|
||||||
# Reset BytesIO object.
|
# Reset BytesIO object.
|
||||||
f.seek(0)
|
f.seek(0)
|
||||||
f.truncate()
|
f.truncate()
|
||||||
|
|
||||||
pickler.dump(data)
|
pickler.dump(data)
|
||||||
second_pickled = f.getvalue()
|
second_pickled = f.getvalue()
|
||||||
|
|
||||||
# Reset the Pickler and BytesIO objects.
|
# Reset the Pickler and BytesIO objects.
|
||||||
pickler.clear_memo()
|
pickler.clear_memo()
|
||||||
f.seek(0)
|
f.seek(0)
|
||||||
f.truncate()
|
f.truncate()
|
||||||
|
|
||||||
pickler.dump(data)
|
pickler.dump(data)
|
||||||
third_pickled = f.getvalue()
|
third_pickled = f.getvalue()
|
||||||
|
|
||||||
self.assertNotEqual(first_pickled, second_pickled)
|
self.assertNotEqual(first_pickled, second_pickled)
|
||||||
self.assertEqual(first_pickled, third_pickled)
|
self.assertEqual(first_pickled, third_pickled)
|
||||||
|
|
||||||
def test_priming_pickler_memo(self):
|
def test_priming_pickler_memo(self):
|
||||||
# Verify that we can set the Pickler's memo attribute.
|
# Verify that we can set the Pickler's memo attribute.
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
End framing at the end of C implementation of :func:`pickle.Pickler.dump`.
|
|
@ -4152,9 +4152,10 @@ dump(PicklerObject *self, PyObject *obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (save(self, obj, 0) < 0 ||
|
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;
|
return -1;
|
||||||
|
self->framing = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue