diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2017-01-03 09:19:48 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2017-01-03 09:19:48 (GMT) |
commit | 8d979d576e123c03f0bb92aeb8043b8d7aa57cf7 (patch) | |
tree | 18f963bb28027421525300a59494b3c06218c458 /Modules/_json.c | |
parent | c70225c98cc449de4dce99a93532498ae44ba7de (diff) | |
parent | 21fe7213455748fa321333d67e3542848bec9630 (diff) | |
download | cpython-8d979d576e123c03f0bb92aeb8043b8d7aa57cf7.zip cpython-8d979d576e123c03f0bb92aeb8043b8d7aa57cf7.tar.gz cpython-8d979d576e123c03f0bb92aeb8043b8d7aa57cf7.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 d3dbf98..5b3d803 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(); |