mirror of
https://github.com/python/cpython.git
synced 2025-12-23 09:19:18 +00:00
bpo-43083: Fix error handling in _sqlite3 (GH-24395)
This commit is contained in:
parent
d64fd4bb5b
commit
9073180db5
2 changed files with 19 additions and 7 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue