diff --git a/Lib/json/tests/test_unicode.py b/Lib/json/tests/test_unicode.py --- a/Lib/json/tests/test_unicode.py +++ b/Lib/json/tests/test_unicode.py @@ -80,6 +80,17 @@ # Issue 10038. self.assertEqual(type(self.loads('"foo"')), unicode) + def test_lone_surrogates(self): + for surrogate in [0xd800, 0xdbff, 0xdc00, 0xdfff]: + ch = unichr(surrogate) + with self.assertRaises(UnicodeEncodeError): + self.dumps(ch) + with self.assertRaises(UnicodeEncodeError): + self.dumps(ch.encode('utf-8')) + with self.assertRaises(UnicodeDecodeError): + self.loads(u'"\\u%04x"' % surrogate) + with self.assertRaises(UnicodeDecodeError): + self.loads('"\u%04x"' % surrogate) class TestPyUnicode(TestUnicode, PyTest): pass class TestCUnicode(TestUnicode, CTest): pass