cpython (merge 3.3 -> default): Merge with 3.3.
http://hg.python.org/cpython/rev/f20d966dc499 changeset: 87657:f20d966dc499 parent: 87654:d565310e7ae3 parent: 87656:b92f9eaedb76 user: Alexandre Vassalotti <alexandre@peadrop.com> date: Sat Nov 30 13:55:39 2013 -0800 summary: Merge with 3.3. files: Lib/test/pickletester.py | 40 +++++++++++++++------------ Misc/NEWS | 3 ++ Modules/_pickle.c | 2 +- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py --- a/Lib/test/pickletester.py +++ b/Lib/test/pickletester.py @@ -1785,30 +1785,34 @@ if isinstance(object, int) and object % 2 == 0: self.id_count += 1 return str(object) + elif object == "test_false_value": + self.false_count += 1 + return "" else: return None def persistent_load(self, oid): - self.load_count += 1 - object = int(oid) - assert object % 2 == 0 - return object + if not oid: + self.load_false_count += 1 + return "test_false_value" + else: + self.load_count += 1 + object = int(oid) + assert object % 2 == 0 + return object def test_persistence(self): - self.id_count = 0 - self.load_count = 0 - L = list(range(10)) - self.assertEqual(self.loads(self.dumps(L)), L) - self.assertEqual(self.id_count, 5) - self.assertEqual(self.load_count, 5) - - def test_bin_persistence(self): - self.id_count = 0 - self.load_count = 0 - L = list(range(10)) - self.assertEqual(self.loads(self.dumps(L, 1)), L) - self.assertEqual(self.id_count, 5) - self.assertEqual(self.load_count, 5) + L = list(range(10)) + ["test_false_value"] + for proto in protocols: + self.id_count = 0 + self.false_count = 0 + self.load_false_count = 0 + self.load_count = 0 + self.assertEqual(self.loads(self.dumps(L, proto)), L) + self.assertEqual(self.id_count, 5) + self.assertEqual(self.false_count, 1) + self.assertEqual(self.load_count, 5) + self.assertEqual(self.load_false_count, 1) class AbstractPicklerUnpicklerObjectTests(unittest.TestCase): diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -30,6 +30,9 @@ - Issue #19698: Removed exec_module() methods from importlib.machinery.BuiltinImporter and ExtensionFileLoader. +- Fixed _pickle.Unpickler to not fail when loading empty strings as + persistent IDs. + - ssl.create_default_context() sets OP_NO_COMPRESSION to prevent CRIME. - Issue #19802: Add socket.SO_PRIORITY. diff --git a/Modules/_pickle.c b/Modules/_pickle.c --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -5355,7 +5355,7 @@ if (self->pers_func) { if ((len = _Unpickler_Readline(self, &s)) < 0) return -1; - if (len < 2) + if (len < 1) return bad_readline(); pid = PyBytes_FromStringAndSize(s, len - 1); -- Repository URL: http://hg.python.org/cpython
participants (1)
-
alexandre.vassalotti