From 8debfa50407107ff2329d01081cdc12d359f1d12 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 16 Sep 2019 20:15:18 +0300 Subject: bpo-38175: Fix a memory leak in comparison of sqlite3.Row objects. (GH-16155) --- Modules/_sqlite/row.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'Modules/_sqlite/row.c') diff --git a/Modules/_sqlite/row.c b/Modules/_sqlite/row.c index 5c2f400824..758518a8ff 100644 --- a/Modules/_sqlite/row.c +++ b/Modules/_sqlite/row.c @@ -192,14 +192,16 @@ static PyObject* pysqlite_row_richcompare(pysqlite_Row *self, PyObject *_other, if (opid != Py_EQ && opid != Py_NE) Py_RETURN_NOTIMPLEMENTED; - if (PyType_IsSubtype(Py_TYPE(_other), &pysqlite_RowType)) { + if (PyObject_TypeCheck(_other, &pysqlite_RowType)) { pysqlite_Row *other = (pysqlite_Row *)_other; - PyObject *res = PyObject_RichCompare(self->description, other->description, opid); - if ((opid == Py_EQ && res == Py_True) - || (opid == Py_NE && res == Py_False)) { - Py_DECREF(res); + int eq = PyObject_RichCompareBool(self->description, other->description, Py_EQ); + if (eq < 0) { + return NULL; + } + if (eq) { return PyObject_RichCompare(self->data, other->data, opid); } + return PyBool_FromLong(opid != Py_EQ); } Py_RETURN_NOTIMPLEMENTED; } -- cgit v1.2.1