From: Victor Stinner Date: Tue, 5 Nov 2013 13:50:30 +0000 (+0100) Subject: Issue #19437: Fix pysqlite_cursor_iternext() of sqlite3, when the row factory X-Git-Tag: v3.4.0b1~386 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=85a12a8bebd20e86fa3931940d7e317fa392cfb8;p=python 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()) --- 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;