]> granicus.if.org Git - python/commitdiff
#19307: Improve error message for json.load(s) while passing objects of the wrong...
authorEzio Melotti <ezio.melotti@gmail.com>
Sun, 20 Oct 2013 22:52:33 +0000 (01:52 +0300)
committerEzio Melotti <ezio.melotti@gmail.com>
Sun, 20 Oct 2013 22:52:33 +0000 (01:52 +0300)
Lib/json/__init__.py
Lib/test/test_json/test_decode.py
Misc/NEWS

index 3f95cc3bbaa27e085b11f911ee5c87b3dadc2e1f..6cedb6e31f7c8cc5374b5a65f6e1bfe1e58a633f 100644 (file)
@@ -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):
index d23e2859099646cd3d36e597c264e224498a9086..05d07b72190071b9722b8a08493be8fed7175065 100644 (file)
@@ -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
index 6d4399af0510c06dd7bb9896f518eef1b398946e..bff7097a60c6ad3083387f5f5c7b1bf02273786b 100644 (file)
--- 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.