]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
check for error conditions in _json #3623
authorBenjamin Peterson <benjamin@python.org>
Thu, 16 Oct 2008 21:09:28 +0000 (21:09 +0000)
committerBenjamin Peterson <benjamin@python.org>
Thu, 16 Oct 2008 21:09:28 +0000 (21:09 +0000)
Lib/json/tests/test_scanstring.py
Modules/_json.c

index 87051bb2e4ae700b7a4b4eb99019961e9527b950..6b600dbe16b55b45886636eedcdb1e0eae07992d 100644 (file)
@@ -2,6 +2,7 @@ import sys
 import decimal
 from unittest import TestCase
 
+import json
 import json.decoder
 
 class TestScanString(TestCase):
@@ -100,3 +101,9 @@ class TestScanString(TestCase):
         self.assertEquals(
             scanstring('["Bad value", truth]', 2, None, True),
             (u'Bad value', 12))
+
+    def test_issue3623(self):
+        self.assertRaises(ValueError, json.decoder.scanstring, b"xxx", 1,
+                          "xxx")
+        self.assertRaises(UnicodeDecodeError,
+                          json.encoder.encode_basestring_ascii, b"xx\xff")
index 88510a76d903bbd3618733844a84c6742fb474fd..832b1ff627e3582cce9ffbe7dbfcbf106b9d44d0 100644 (file)
@@ -179,11 +179,13 @@ raise_errmsg(char *msg, PyObject *s, Py_ssize_t end)
         errmsg_fn = PyObject_GetAttrString(decoder, "errmsg");
         if (errmsg_fn == NULL)
             return;
-        Py_XDECREF(decoder);
+        Py_DECREF(decoder);
     }
     pymsg = PyObject_CallFunction(errmsg_fn, "(zOn)", msg, s, end);
-    PyErr_SetObject(PyExc_ValueError, pymsg);
-    Py_DECREF(pymsg);
+    if (pymsg) {
+        PyErr_SetObject(PyExc_ValueError, pymsg);
+        Py_DECREF(pymsg);
+    }
 /*
 
 def linecol(doc, pos):