[Python-checkins] bpo-33209: End framing at the end of C implementation of pickle.Pickler.dump(). (GH-6366)
Łukasz Langa
webhook-mailer at python.org
Tue Apr 3 17:35:14 EDT 2018
https://github.com/python/cpython/commit/74735e2a404949b2a0c17ac13a2de0e0cac6fc41
commit: 74735e2a404949b2a0c17ac13a2de0e0cac6fc41
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: Łukasz Langa <lukasz at langa.pl>
date: 2018-04-03T14:35:11-07:00
summary:
bpo-33209: End framing at the end of C implementation of pickle.Pickler.dump(). (GH-6366)
(cherry picked from commit c869529ea9fbed574d34cf7ac139ca3f81b62ef0)
Co-authored-by: Serhiy Storchaka <storchaka at gmail.com>
files:
A Misc/NEWS.d/next/Library/2018-04-03-10-37-13.bpo-33209.9sGWE_.rst
M Lib/test/pickletester.py
M Modules/_pickle.c
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index b84b87861d01..71c2feadb613 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -2781,29 +2781,30 @@ def test_clear_pickler_memo(self):
# 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 000000000000..d98b1e174e55
--- /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 9525ad6d9661..6a684f25fefd 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;
}
More information about the Python-checkins
mailing list