]> granicus.if.org Git - python/commitdiff
Merge 3.3
authorAlexandre Vassalotti <alexandre@peadrop.com>
Sat, 20 Apr 2013 20:25:55 +0000 (13:25 -0700)
committerAlexandre Vassalotti <alexandre@peadrop.com>
Sat, 20 Apr 2013 20:25:55 +0000 (13:25 -0700)
1  2 
Lib/pickle.py
Lib/test/pickletester.py
Misc/NEWS

diff --cc Lib/pickle.py
Simple merge
index c58b8761c0befec0cb2c0bc302ef9d837590c9a7,342346291ed3a1f2b920f2654c61327b7933c697..7e6e75814ec1fda247e768f013f048b021e86e5a
@@@ -1190,35 -1214,29 +1190,58 @@@ class AbstractPickleTests(unittest.Test
          dumped = b'\x80\x03X\x01\x00\x00\x00ar\xff\xff\xff\xff.'
          self.assertRaises(ValueError, self.loads, dumped)
  
 +    def test_badly_escaped_string(self):
 +        self.assertRaises(ValueError, self.loads, b"S'\\'\n.")
 +
 +    def test_badly_quoted_string(self):
 +        # Issue #17710
 +        badpickles = [b"S'\n.",
 +                      b'S"\n.',
 +                      b'S\' \n.',
 +                      b'S" \n.',
 +                      b'S\'"\n.',
 +                      b'S"\'\n.',
 +                      b"S' ' \n.",
 +                      b'S" " \n.',
 +                      b"S ''\n.",
 +                      b'S ""\n.',
 +                      b'S \n.',
 +                      b'S\n.',
 +                      b'S.']
 +        for p in badpickles:
 +            self.assertRaises(pickle.UnpicklingError, self.loads, p)
 +
 +    def test_correctly_quoted_string(self):
 +        goodpickles = [(b"S''\n.", ''),
 +                       (b'S""\n.', ''),
 +                       (b'S"\\n"\n.', '\n'),
 +                       (b"S'\\n'\n.", '\n')]
 +        for p, expected in goodpickles:
 +            self.assertEqual(self.loads(p), expected)
 +
+     def _check_pickling_with_opcode(self, obj, opcode, proto):
+         pickled = self.dumps(obj, proto)
+         self.assertTrue(opcode_in_pickle(opcode, pickled))
+         unpickled = self.loads(pickled)
+         self.assertEqual(obj, unpickled)
+     def test_appends_on_non_lists(self):
+         # Issue #17720
+         obj = REX_six([1, 2, 3])
+         for proto in protocols:
+             if proto == 0:
+                 self._check_pickling_with_opcode(obj, pickle.APPEND, proto)
+             else:
+                 self._check_pickling_with_opcode(obj, pickle.APPENDS, proto)
+     def test_setitems_on_non_dicts(self):
+         obj = REX_seven({1: -1, 2: -2, 3: -3})
+         for proto in protocols:
+             if proto == 0:
+                 self._check_pickling_with_opcode(obj, pickle.SETITEM, proto)
+             else:
+                 self._check_pickling_with_opcode(obj, pickle.SETITEMS, proto)
  
  class BigmemPickleTests(unittest.TestCase):
  
diff --cc Misc/NEWS
Simple merge