diff --git a/CHANGELOG.md b/CHANGELOG.md index 066db88..8d2306f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ ## Development * Added support for Python 3.12. +* Fixed a memory leak in the ``yajl2_c`` backend + triggered only when the underlying ``yajl`` functions + reported a failure (#97). ## [3.2.0.post0] diff --git a/ijson/backends/yajl2_c/reading_generator.c b/ijson/backends/yajl2_c/reading_generator.c index d17be2c..8758b76 100644 --- a/ijson/backends/yajl2_c/reading_generator.c +++ b/ijson/backends/yajl2_c/reading_generator.c @@ -74,6 +74,7 @@ PyObject *reading_generator_next(reading_generator_t *self) length = view.len; PyObject *send_res = ijson_yajl_parse(basic_parse_basecoro->h, view.buf, view.len); Py_DECREF(pbuffer); + PyBuffer_Release(&view); N_N(send_res); } else { @@ -84,9 +85,10 @@ PyObject *reading_generator_next(reading_generator_t *self) N_M1(length); Py_DECREF(plength); N_M1(PyObject_GetBuffer(self->buffer, &view, PyBUF_SIMPLE)); - N_N(ijson_yajl_parse(basic_parse_basecoro->h, view.buf, length)); + PyObject *send_res = ijson_yajl_parse(basic_parse_basecoro->h, view.buf, length); + PyBuffer_Release(&view); + N_N(send_res); } - PyBuffer_Release(&view); nevents = PyList_Size(events); if (length == 0) {