Fixed possible reference leaks in the _json module.

This commit is contained in:
Serhiy Storchaka 2017-01-03 11:17:44 +02:00
parent d9cb1b0c2d
commit 21fe721345
1 changed files with 9 additions and 4 deletions

View File

@ -845,14 +845,16 @@ _parse_array_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssi
int kind; int kind;
Py_ssize_t end_idx; Py_ssize_t end_idx;
PyObject *val = NULL; PyObject *val = NULL;
PyObject *rval = PyList_New(0); PyObject *rval;
Py_ssize_t next_idx; Py_ssize_t next_idx;
if (rval == NULL)
return NULL;
if (PyUnicode_READY(pystr) == -1) if (PyUnicode_READY(pystr) == -1)
return NULL; return NULL;
rval = PyList_New(0);
if (rval == NULL)
return NULL;
str = PyUnicode_DATA(pystr); str = PyUnicode_DATA(pystr);
kind = PyUnicode_KIND(pystr); kind = PyUnicode_KIND(pystr);
end_idx = PyUnicode_GET_LENGTH(pystr) - 1; end_idx = PyUnicode_GET_LENGTH(pystr) - 1;
@ -1559,8 +1561,11 @@ encoder_listencode_obj(PyEncoderObject *s, _PyAccu *acc,
return -1; 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; return -1;
}
rv = encoder_listencode_obj(s, acc, newobj, indent_level); rv = encoder_listencode_obj(s, acc, newobj, indent_level);
Py_LeaveRecursiveCall(); Py_LeaveRecursiveCall();