bpo-43083: Fix error handling in _sqlite3 (GH-24395)

This commit is contained in:
Serhiy Storchaka 2021-01-31 17:42:38 +02:00 committed by GitHub
parent d64fd4bb5b
commit 9073180db5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 7 deletions

View file

@ -1772,7 +1772,11 @@ pysqlite_connection_create_collation_impl(pysqlite_Connection *self,
(callable != Py_None) ? callable : NULL,
(callable != Py_None) ? pysqlite_collation_callback : NULL);
if (rc != SQLITE_OK) {
PyDict_DelItem(self->collations, uppercase_name);
if (callable != Py_None) {
if (PyDict_DelItem(self->collations, uppercase_name) < 0) {
PyErr_Clear();
}
}
_pysqlite_seterror(self->db, NULL);
goto finally;
}

View file

@ -567,11 +567,13 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation
}
if (!multiple) {
Py_DECREF(self->lastrowid);
Py_BEGIN_ALLOW_THREADS
lastrowid = sqlite3_last_insert_rowid(self->connection->db);
Py_END_ALLOW_THREADS
self->lastrowid = PyLong_FromLongLong(lastrowid);
Py_SETREF(self->lastrowid, PyLong_FromLongLong(lastrowid));
if (self->lastrowid == NULL) {
goto error;
}
}
if (rc == SQLITE_ROW) {
@ -842,8 +844,11 @@ pysqlite_cursor_fetchmany_impl(pysqlite_Cursor *self, int maxrows)
}
while ((row = pysqlite_cursor_iternext(self))) {
PyList_Append(list, row);
Py_XDECREF(row);
if (PyList_Append(list, row) < 0) {
Py_DECREF(row);
break;
}
Py_DECREF(row);
if (++counter == maxrows) {
break;
@ -877,8 +882,11 @@ pysqlite_cursor_fetchall_impl(pysqlite_Cursor *self)
}
while ((row = pysqlite_cursor_iternext(self))) {
PyList_Append(list, row);
Py_XDECREF(row);
if (PyList_Append(list, row) < 0) {
Py_DECREF(row);
break;
}
Py_DECREF(row);
}
if (PyErr_Occurred()) {