summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEzio Melotti <ezio.melotti@gmail.com>2013-10-20 22:52:33 (GMT)
committerEzio Melotti <ezio.melotti@gmail.com>2013-10-20 22:52:33 (GMT)
commita0e768ccc250dbe6ffab812b7964538013ae36c4 (patch)
tree80630a60d1c6dc489f7fd398e7ac6227fe34a1c1
parent4ea16e56ebd39e95392e3549c7dad2dd4d6ed602 (diff)
downloadcpython-a0e768ccc250dbe6ffab812b7964538013ae36c4.zip
cpython-a0e768ccc250dbe6ffab812b7964538013ae36c4.tar.gz
cpython-a0e768ccc250dbe6ffab812b7964538013ae36c4.tar.bz2
#19307: Improve error message for json.load(s) while passing objects of the wrong type.
-rw-r--r--Lib/json/__init__.py3
-rw-r--r--Lib/test/test_json/test_decode.py9
-rw-r--r--Misc/NEWS3
3 files changed, 14 insertions, 1 deletions
diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py
index 3f95cc3..6cedb6e 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 d23e285..05d07b7 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 6d4399a..bff7097 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.