Merge with 3.3.

This commit is contained in:
Alexandre Vassalotti 2013-11-30 13:55:39 -08:00
commit a1eedf9ff0
3 changed files with 26 additions and 19 deletions

View file

@ -1785,30 +1785,34 @@ class AbstractPersistentPicklerTests(unittest.TestCase):
if isinstance(object, int) and object % 2 == 0: if isinstance(object, int) and object % 2 == 0:
self.id_count += 1 self.id_count += 1
return str(object) return str(object)
elif object == "test_false_value":
self.false_count += 1
return ""
else: else:
return None return None
def persistent_load(self, oid): def persistent_load(self, oid):
self.load_count += 1 if not oid:
object = int(oid) self.load_false_count += 1
assert object % 2 == 0 return "test_false_value"
return object else:
self.load_count += 1
object = int(oid)
assert object % 2 == 0
return object
def test_persistence(self): def test_persistence(self):
self.id_count = 0 L = list(range(10)) + ["test_false_value"]
self.load_count = 0 for proto in protocols:
L = list(range(10)) self.id_count = 0
self.assertEqual(self.loads(self.dumps(L)), L) self.false_count = 0
self.assertEqual(self.id_count, 5) self.load_false_count = 0
self.assertEqual(self.load_count, 5) self.load_count = 0
self.assertEqual(self.loads(self.dumps(L, proto)), L)
def test_bin_persistence(self): self.assertEqual(self.id_count, 5)
self.id_count = 0 self.assertEqual(self.false_count, 1)
self.load_count = 0 self.assertEqual(self.load_count, 5)
L = list(range(10)) self.assertEqual(self.load_false_count, 1)
self.assertEqual(self.loads(self.dumps(L, 1)), L)
self.assertEqual(self.id_count, 5)
self.assertEqual(self.load_count, 5)
class AbstractPicklerUnpicklerObjectTests(unittest.TestCase): class AbstractPicklerUnpicklerObjectTests(unittest.TestCase):

View file

@ -30,6 +30,9 @@ Library
- Issue #19698: Removed exec_module() methods from - Issue #19698: Removed exec_module() methods from
importlib.machinery.BuiltinImporter and ExtensionFileLoader. 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. - ssl.create_default_context() sets OP_NO_COMPRESSION to prevent CRIME.
- Issue #19802: Add socket.SO_PRIORITY. - Issue #19802: Add socket.SO_PRIORITY.

View file

@ -5355,7 +5355,7 @@ load_persid(UnpicklerObject *self)
if (self->pers_func) { if (self->pers_func) {
if ((len = _Unpickler_Readline(self, &s)) < 0) if ((len = _Unpickler_Readline(self, &s)) < 0)
return -1; return -1;
if (len < 2) if (len < 1)
return bad_readline(); return bad_readline();
pid = PyBytes_FromStringAndSize(s, len - 1); pid = PyBytes_FromStringAndSize(s, len - 1);