From: Ezio Melotti Date: Tue, 12 Mar 2013 23:49:57 +0000 (+0200) Subject: #17368: Fix an off-by-one error in the Python JSON decoder that caused a failure... X-Git-Tag: v2.7.4rc1~40 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fda7a8ce78cdc46c6728ad9cd82c4b3eccd0dd92;p=thirdparty%2FPython%2Fcpython.git #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. --- diff --git a/Lib/json/decoder.py b/Lib/json/decoder.py index dc8916c9264f..dfcc6284a28b 100644 --- a/Lib/json/decoder.py +++ b/Lib/json/decoder.py @@ -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) diff --git a/Lib/json/tests/test_decode.py b/Lib/json/tests/test_decode.py index 478a16ba0fda..ffd1aa4badbc 100644 --- a/Lib/json/tests/test_decode.py +++ b/Lib/json/tests/test_decode.py @@ -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' diff --git a/Misc/NEWS b/Misc/NEWS index 992b70e615f1..d861538f8c2c 100644 --- 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.