Mercurial > cpython-lru_cache-weakref
diff Modules/_sqlite/connection.c @ 86945:00ee08fac522
Issue #19437: Fix pysqlite_connection_call() of sqlite3, return NULL when
PyList_Append() fails
| author | Victor Stinner <victor.stinner@gmail.com> |
|---|---|
| date | Tue, 05 Nov 2013 14:46:13 +0100 |
| parents | c1adbba72e32 |
| children | 4a09cc62419b |
line wrap: on
line diff
--- a/Modules/_sqlite/connection.c Tue Nov 05 14:30:11 2013 +0100 +++ b/Modules/_sqlite/connection.c Tue Nov 05 14:46:13 2013 +0100 @@ -1229,9 +1229,8 @@ return NULL; } - if (!PyArg_ParseTuple(args, "O", &sql)) { + if (!PyArg_ParseTuple(args, "O", &sql)) return NULL; - } _pysqlite_drop_unused_statement_references(self); @@ -1247,7 +1246,6 @@ statement->in_weakreflist = NULL; rc = pysqlite_statement_create(statement, self, sql); - if (rc != SQLITE_OK) { if (rc == PYSQLITE_TOO_MUCH_SQL) { PyErr_SetString(pysqlite_Warning, "You can only execute one statement at a time."); @@ -1257,25 +1255,23 @@ (void)pysqlite_statement_reset(statement); _pysqlite_seterror(self->db, NULL); } - - Py_CLEAR(statement); - } else { - weakref = PyWeakref_NewRef((PyObject*)statement, NULL); - if (!weakref) { - Py_CLEAR(statement); - goto error; - } - - if (PyList_Append(self->statements, weakref) != 0) { - Py_CLEAR(weakref); - goto error; - } - - Py_DECREF(weakref); + goto error; } + weakref = PyWeakref_NewRef((PyObject*)statement, NULL); + if (weakref == NULL) + goto error; + if (PyList_Append(self->statements, weakref) != 0) { + Py_DECREF(weakref); + goto error; + } + Py_DECREF(weakref); + + return (PyObject*)statement; + error: - return (PyObject*)statement; + Py_DECREF(statement); + return NULL; } PyObject* pysqlite_connection_execute(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
