From 2e61166b05b5de5a9bd7e14235deec0c37d33af5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 18 Jul 2013 01:54:37 +0200 Subject: Issue #18408: Fix _pysqlite_fetch_one_row(), in debug mode, don't call type_call() with an exception set --- Modules/_sqlite/cursor.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'Modules/_sqlite/cursor.c') diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 49994158db..8f9bd699a6 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -339,6 +339,11 @@ PyObject* _pysqlite_fetch_one_row(pysqlite_Cursor* self) if (self->connection->text_factory == (PyObject*)&PyUnicode_Type) { converted = PyUnicode_FromStringAndSize(val_str, nbytes); if (!converted) { +#ifdef Py_DEBUG + /* in debug mode, type_call() fails with an assertion + error if an exception is set when it is called */ + PyErr_Clear(); +#endif colname = sqlite3_column_name(self->statement->st, i); if (!colname) { colname = ""; -- cgit v1.2.1 From a66f221e549be146e0a08fc6c87e6800fa6dec2a Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 17 Aug 2013 00:48:02 +0300 Subject: Issue #18701: Remove support of old CPython versions (<3.0) from C code. --- Modules/_sqlite/cursor.c | 1 - 1 file changed, 1 deletion(-) (limited to 'Modules/_sqlite/cursor.c') diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 8f9bd699a6..bf4bbb4a28 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -24,7 +24,6 @@ #include "cursor.h" #include "module.h" #include "util.h" -#include "sqlitecompat.h" PyObject* pysqlite_cursor_iternext(pysqlite_Cursor* self); -- cgit v1.2.1 From a20dfca1aaa022a56c4ab1bca4bcd7cd692109e8 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 5 Nov 2013 14:30:11 +0100 Subject: Issue #19437: Fix pysqlite_cursor_iternext() of sqlite3, handle _pysqlite_fetch_one_row() failure --- Modules/_sqlite/cursor.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'Modules/_sqlite/cursor.c') diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index bf4bbb4a28..cf7f9d3242 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -891,6 +891,12 @@ PyObject* pysqlite_cursor_iternext(pysqlite_Cursor *self) if (rc == SQLITE_ROW) { self->next_row = _pysqlite_fetch_one_row(self); + if (self->next_row == NULL) { + (void)pysqlite_statement_reset(self->statement); + Py_DECREF(next_row); + _pysqlite_seterror(self->connection->db, NULL); + return NULL; + } } } -- cgit v1.2.1 From cf241142eb55372a12deed0b80b4935b80ee7776 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 5 Nov 2013 14:50:30 +0100 Subject: Issue #19437: Fix pysqlite_cursor_iternext() of sqlite3, when the row factory fails, don't consume the row (restore it) and fail immediatly (don't call pysqlite_step()) --- Modules/_sqlite/cursor.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'Modules/_sqlite/cursor.c') diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index cf7f9d3242..8d10890eb0 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -871,10 +871,15 @@ PyObject* pysqlite_cursor_iternext(pysqlite_Cursor *self) } next_row_tuple = self->next_row; + assert(next_row_tuple != NULL); self->next_row = NULL; if (self->row_factory != Py_None) { next_row = PyObject_CallFunction(self->row_factory, "OO", self, next_row_tuple); + if (next_row == NULL) { + self->next_row = next_row_tuple; + return NULL; + } Py_DECREF(next_row_tuple); } else { next_row = next_row_tuple; -- cgit v1.2.1