diff options
author | Gerhard Häring <gh@ghaering.de> | 2007-12-11 21:07:40 (GMT) |
---|---|---|
committer | Gerhard Häring <gh@ghaering.de> | 2007-12-11 21:07:40 (GMT) |
commit | 99b9df8e11ad6a80185a3a490759561710646c19 (patch) | |
tree | f45406afbe38934b4c0790886098678a80ae6778 /Modules/_sqlite/statement.c | |
parent | 7a634e60272abf547d6a0c78f7a054e27773859f (diff) | |
download | cpython-99b9df8e11ad6a80185a3a490759561710646c19.zip cpython-99b9df8e11ad6a80185a3a490759561710646c19.tar.gz cpython-99b9df8e11ad6a80185a3a490759561710646c19.tar.bz2 |
Forward-port of commit 59184.
- Backported a workaround for a bug in SQLite 3.2.x/3.3.x versions where a
statement recompilation with no bound parameters lead to a segfault
- Backported a fix necessary because of an SQLite API change in version
3.5.
This prevents segfaults when executing empty queries, like our test suite
does
Diffstat (limited to 'Modules/_sqlite/statement.c')
-rw-r--r-- | Modules/_sqlite/statement.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c index 20c1aac..97d2e2a 100644 --- a/Modules/_sqlite/statement.c +++ b/Modules/_sqlite/statement.c @@ -237,7 +237,11 @@ int pysqlite_statement_recompile(pysqlite_Statement* self, PyObject* params) */ #ifdef SQLITE_VERSION_NUMBER #if SQLITE_VERSION_NUMBER >= 3002002 - (void)sqlite3_transfer_bindings(self->st, new_st); + /* The check for the number of parameters is necessary to not trigger a + * bug in certain SQLite versions (experienced in 3.2.8 and 3.3.4). */ + if (sqlite3_bind_parameter_count(self->st) > 0) { + (void)sqlite3_transfer_bindings(self->st, new_st); + } #endif #else statement_bind_parameters(self, params); |