From 41581254f8497a554f736bac805d02e5b06fda28 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 4 Dec 2018 21:31:33 -0600 Subject: [PATCH] Fix a reference leak in store_result and use_result if result object initialization fails. (#298) --- MySQLdb/_mysql.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/MySQLdb/_mysql.c b/MySQLdb/_mysql.c index ce88d03..66aba45 100644 --- a/MySQLdb/_mysql.c +++ b/MySQLdb/_mysql.c @@ -1865,8 +1865,10 @@ _mysql_ConnectionObject_store_result( if (!kwarglist) goto error; r = MyAlloc(_mysql_ResultObject, _mysql_ResultObject_Type); if (!r) goto error; - if (_mysql_ResultObject_Initialize(r, arglist, kwarglist)) + if (_mysql_ResultObject_Initialize(r, arglist, kwarglist)) { + Py_DECREF(r); goto error; + } result = (PyObject *) r; if (!(r->result)) { Py_DECREF(result); @@ -1924,9 +1926,11 @@ _mysql_ConnectionObject_use_result( if (!kwarglist) goto error; r = MyAlloc(_mysql_ResultObject, _mysql_ResultObject_Type); if (!r) goto error; - result = (PyObject *) r; - if (_mysql_ResultObject_Initialize(r, arglist, kwarglist)) + if (_mysql_ResultObject_Initialize(r, arglist, kwarglist)) { + Py_DECREF(r); goto error; + } + result = (PyObject *) r; if (!(r->result)) { Py_DECREF(result); Py_INCREF(Py_None);