#17368: Fix an off-by-one error in the Python JSON decoder that caused a failure...
authorEzio Melotti <ezio.melotti@gmail.com>
Tue, 12 Mar 2013 23:49:57 +0000 (01:49 +0200)
committerEzio Melotti <ezio.melotti@gmail.com>
Tue, 12 Mar 2013 23:49:57 +0000 (01:49 +0200)
Lib/json/decoder.py
Lib/json/tests/test_decode.py
Misc/NEWS

index dc8916c9264f8189167d0a8c9923f0c51ea50c43..dfcc6284a28b87f1aff0012cc8a66358be1c005e 100644 (file)
@@ -163,7 +163,7 @@ def JSONObject(s_and_end, encoding, strict, scan_once, object_hook,
         if nextchar == '}':
             if object_pairs_hook is not None:
                 result = object_pairs_hook(pairs)
-                return result, end
+                return result, end + 1
             pairs = {}
             if object_hook is not None:
                 pairs = object_hook(pairs)
index 478a16ba0fda5c0bebaa2737182556dc3261c230..ffd1aa4badbc896213a6edc4413661346de11695 100644 (file)
@@ -40,10 +40,15 @@ class TestDecode(object):
         self.assertEqual(od, OrderedDict(p))
         self.assertEqual(type(od), OrderedDict)
         # the object_pairs_hook takes priority over the object_hook
-        self.assertEqual(self.loads(s,
-                                    object_pairs_hook=OrderedDict,
+        self.assertEqual(self.loads(s, object_pairs_hook=OrderedDict,
                                     object_hook=lambda x: None),
                          OrderedDict(p))
+        # check that empty objects literals work (see #17368)
+        self.assertEqual(self.loads('{}', object_pairs_hook=OrderedDict),
+                         OrderedDict())
+        self.assertEqual(self.loads('{"empty": {}}',
+                                    object_pairs_hook=OrderedDict),
+                         OrderedDict([('empty', OrderedDict())]))
 
     def test_extra_data(self):
         s = '[1, 2, 3]5'
index 992b70e615f13a16b5049e54d2de47a3045eadcf..d861538f8c2cfef639f40b7669ca6748fef4b580 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -214,6 +214,10 @@ Core and Builtins
 Library
 -------
 
+- Issue #17368: Fix an off-by-one error in the Python JSON decoder that caused
+  a failure while decoding empty object literals when object_pairs_hook was
+  specified.
+
 - Issue #17278: Fix a crash in heapq.heappush() and heapq.heappop() when
   the list is being resized concurrently.