From: Serhiy Storchaka Date: Tue, 22 May 2018 11:55:07 +0000 (+0300) Subject: bpo-30877: Fix clearing a cache in the the JSON decoder. (GH-7048) X-Git-Tag: v3.8.0a1~1783 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ae00fb1d4f38ea1803b10d798564740adcdad63e;p=thirdparty%2FPython%2Fcpython.git bpo-30877: Fix clearing a cache in the the JSON decoder. (GH-7048) --- diff --git a/Lib/json/scanner.py b/Lib/json/scanner.py index c451ebab5842..7a61cfc2d24d 100644 --- a/Lib/json/scanner.py +++ b/Lib/json/scanner.py @@ -68,6 +68,6 @@ def py_make_scanner(context): finally: memo.clear() - return _scan_once + return scan_once make_scanner = c_make_scanner or py_make_scanner diff --git a/Lib/test/test_json/test_decode.py b/Lib/test/test_json/test_decode.py index d84ef7da2446..fdb9e62124ec 100644 --- a/Lib/test/test_json/test_decode.py +++ b/Lib/test/test_json/test_decode.py @@ -58,7 +58,9 @@ class TestDecode: def test_keys_reuse(self): s = '[{"a_key": 1, "b_\xe9": 2}, {"a_key": 3, "b_\xe9": 4}]' self.check_keys_reuse(s, self.loads) - self.check_keys_reuse(s, self.json.decoder.JSONDecoder().decode) + decoder = self.json.decoder.JSONDecoder() + self.check_keys_reuse(s, decoder.decode) + self.assertFalse(decoder.memo) def test_extra_data(self): s = '[1, 2, 3]5' diff --git a/Misc/NEWS.d/next/Library/2018-05-22-13-05-12.bpo-30877.JZEGjI.rst b/Misc/NEWS.d/next/Library/2018-05-22-13-05-12.bpo-30877.JZEGjI.rst new file mode 100644 index 000000000000..4be0fae4ecb6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-05-22-13-05-12.bpo-30877.JZEGjI.rst @@ -0,0 +1,3 @@ +Fixed a bug in the Python implementation of the JSON decoder that prevented +the cache of parsed strings from clearing after finishing the decoding. +Based on patch by c-fos.