From: Ezio Melotti Date: Sun, 20 Oct 2013 22:52:33 +0000 (+0300) Subject: #19307: Improve error message for json.load(s) while passing objects of the wrong... X-Git-Tag: v3.4.0b1~571^2~38 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a0e768ccc250dbe6ffab812b7964538013ae36c4;p=python #19307: Improve error message for json.load(s) while passing objects of the wrong type. --- diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py index 3f95cc3bba..6cedb6e31f 100644 --- a/Lib/json/__init__.py +++ b/Lib/json/__init__.py @@ -310,6 +310,9 @@ def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, The ``encoding`` argument is ignored and deprecated. """ + if not isinstance(s, str): + raise TypeError('the JSON object must be str, not {!r}'.format( + s.__class__.__name__)) if (cls is None and object_hook is None and parse_int is None and parse_float is None and parse_constant is None and object_pairs_hook is None and not kw): diff --git a/Lib/test/test_json/test_decode.py b/Lib/test/test_json/test_decode.py index d23e285909..05d07b7219 100644 --- a/Lib/test/test_json/test_decode.py +++ b/Lib/test/test_json/test_decode.py @@ -1,5 +1,5 @@ import decimal -from io import StringIO +from io import StringIO, BytesIO from collections import OrderedDict from test.test_json import PyTest, CTest @@ -70,5 +70,12 @@ class TestDecode: msg = 'escape' self.assertRaisesRegex(ValueError, msg, self.loads, s) + def test_invalid_input_type(self): + msg = 'the JSON object must be str' + for value in [1, 3.14, b'bytes', b'\xff\x00', [], {}, None]: + self.assertRaisesRegex(TypeError, msg, self.loads, value) + with self.assertRaisesRegex(TypeError, msg): + self.json.load(BytesIO(b'[1,2,3]')) + class TestPyDecode(TestDecode, PyTest): pass class TestCDecode(TestDecode, CTest): pass diff --git a/Misc/NEWS b/Misc/NEWS index 6d4399af05..bff7097a60 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -62,6 +62,9 @@ Core and Builtins Library ------- +- Issue #19307: Improve error message for json.load(s) while passing objects + of the wrong type. + - Issue #16038: CVE-2013-1752: ftplib: Limit amount of data read by limiting the call to readline(). Original patch by Michał Jastrzębski and Giampaolo Rodola.