diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2017-01-03 09:17:44 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2017-01-03 09:17:44 (GMT) |
commit | 21fe7213455748fa321333d67e3542848bec9630 (patch) | |
tree | c4612da0326389e79bcd09ab78c85c0dd033f7dc /Modules/_json.c | |
parent | d9cb1b0c2d25ac1e368580a14803847688183518 (diff) | |
download | cpython-21fe7213455748fa321333d67e3542848bec9630.zip cpython-21fe7213455748fa321333d67e3542848bec9630.tar.gz cpython-21fe7213455748fa321333d67e3542848bec9630.tar.bz2 |
Fixed possible reference leaks in the _json module.
Diffstat (limited to 'Modules/_json.c')
-rw-r--r-- | Modules/_json.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/Modules/_json.c b/Modules/_json.c index f82af34..47c9b0d 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(); |