From: Alexander Korotkov Date: Fri, 15 Jun 2018 12:01:46 +0000 (+0300) Subject: Fix memory leak in PLySequence_ToJsonbValue() X-Git-Tag: REL_11_BETA2~54 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dad8bed04ab98ada84ecd58ace6f59839aa161c4;p=postgresql Fix memory leak in PLySequence_ToJsonbValue() PyObject returned from PySequence_GetItem() is not released. Similar code in PLyMapping_ToJsonbValue() is correct, because according to Python documentation PyList_GetItem() and PyTuple_GetItem() return a borrowed reference while PySequence_GetItem() returns new reference. contrib/jsonb_plpython is new in PostgreSQL 11, no backpatch is needed. Author: Nikita Glukhov Discussion: https://postgr.es/m/6001af16-b242-2527-bc7e-84b8a959163b%40postgrespro.ru --- diff --git a/contrib/jsonb_plpython/jsonb_plpython.c b/contrib/jsonb_plpython/jsonb_plpython.c index f752d6c3cd..d6d6eeb9c1 100644 --- a/contrib/jsonb_plpython/jsonb_plpython.c +++ b/contrib/jsonb_plpython/jsonb_plpython.c @@ -308,6 +308,8 @@ PLySequence_ToJsonbValue(PyObject *obj, JsonbParseState **jsonb_state) PyObject *value = PySequence_GetItem(obj, i); (void) PLyObject_ToJsonbValue(value, jsonb_state, true); + + Py_XDECREF(value); } return pushJsonbValue(jsonb_state, WJB_END_ARRAY, NULL);