[Python-checkins] bpo-37502: handle default parameter for buffers argument of pickle.loads correctly (GH-14593)

Miss Islington (bot) webhook-mailer at python.org
Thu Jul 25 12:18:24 EDT 2019


https://github.com/python/cpython/commit/25cb4fd4fb0f44d2b6bf38379634f3d22b77aa17
commit: 25cb4fd4fb0f44d2b6bf38379634f3d22b77aa17
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2019-07-25T09:18:20-07:00
summary:

bpo-37502: handle default parameter for buffers argument of pickle.loads correctly (GH-14593)

(cherry picked from commit 898318b53d921298d1f1fcfa0f415844afbeb318)

Co-authored-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

files:
A Misc/NEWS.d/next/Library/2019-07-08-03-15-04.bpo-37502.qZGC4g.rst
M Lib/test/pickletester.py
M Modules/_pickle.c

diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index f8f3bc92e7fe..2bc99e6becfd 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -2765,6 +2765,11 @@ def test_buffers_error(self):
             with self.assertRaises(pickle.UnpicklingError):
                 self.loads(data, buffers=[])
 
+    def test_inband_accept_default_buffers_argument(self):
+        for proto in range(5, pickle.HIGHEST_PROTOCOL + 1):
+            data_pickled = self.dumps(1, proto, buffer_callback=None)
+            data = self.loads(data_pickled, buffers=None)
+
     @unittest.skipIf(np is None, "Test needs Numpy")
     def test_buffers_numpy(self):
         def check_no_copy(x, y):
diff --git a/Misc/NEWS.d/next/Library/2019-07-08-03-15-04.bpo-37502.qZGC4g.rst b/Misc/NEWS.d/next/Library/2019-07-08-03-15-04.bpo-37502.qZGC4g.rst
new file mode 100644
index 000000000000..4eb6d0974bde
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-07-08-03-15-04.bpo-37502.qZGC4g.rst
@@ -0,0 +1 @@
+pickle.loads() no longer raises TypeError when the buffers argument is set to None
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index 0a597575b358..bbe26034881a 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -1653,7 +1653,7 @@ _Unpickler_SetInputEncoding(UnpicklerObject *self,
 static int
 _Unpickler_SetBuffers(UnpicklerObject *self, PyObject *buffers)
 {
-    if (buffers == NULL) {
+    if (buffers == NULL || buffers == Py_None) {
         self->buffers = NULL;
     }
     else {



More information about the Python-checkins mailing list