From: Serhiy Storchaka Date: Tue, 3 Jan 2017 09:17:44 +0000 (+0200) Subject: Fixed possible reference leaks in the _json module. X-Git-Tag: v3.6.1rc1~214^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=21fe7213455748fa321333d67e3542848bec9630;p=thirdparty%2FPython%2Fcpython.git Fixed possible reference leaks in the _json module. --- diff --git a/Modules/_json.c b/Modules/_json.c index f82af347cbb3..47c9b0d2f775 100644 --- a/Modules/_json.c +++ b/Modules/_json.c @@ -845,14 +845,16 @@ _parse_array_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssi int kind; Py_ssize_t end_idx; PyObject *val = NULL; - PyObject *rval = PyList_New(0); + PyObject *rval; Py_ssize_t next_idx; - if (rval == NULL) - return NULL; if (PyUnicode_READY(pystr) == -1) return NULL; + rval = PyList_New(0); + if (rval == NULL) + return NULL; + str = PyUnicode_DATA(pystr); kind = PyUnicode_KIND(pystr); end_idx = PyUnicode_GET_LENGTH(pystr) - 1; @@ -1559,8 +1561,11 @@ encoder_listencode_obj(PyEncoderObject *s, _PyAccu *acc, return -1; } - if (Py_EnterRecursiveCall(" while encoding a JSON object")) + if (Py_EnterRecursiveCall(" while encoding a JSON object")) { + Py_DECREF(newobj); + Py_XDECREF(ident); return -1; + } rv = encoder_listencode_obj(s, acc, newobj, indent_level); Py_LeaveRecursiveCall();