Mercurial > cpython-lru_cache-weakref
diff Modules/_sqlite/statement.c @ 82055:55a89352e220 3.2
Issue #17073: Fix some integer overflows in sqlite3 module.
| author | Serhiy Storchaka <storchaka@gmail.com> |
|---|---|
| date | Thu, 07 Feb 2013 17:01:47 +0200 |
| parents | 2e13011b3719 |
| children | c5fb8bc56def |
line wrap: on
line diff
--- a/Modules/_sqlite/statement.c Thu Feb 07 16:23:21 2013 +0200 +++ b/Modules/_sqlite/statement.c Thu Feb 07 17:01:47 2013 +0200 @@ -26,6 +26,7 @@ #include "connection.h" #include "microprotocols.h" #include "prepare_protocol.h" +#include "util.h" #include "sqlitecompat.h" /* prototypes */ @@ -90,7 +91,6 @@ int pysqlite_statement_bind_parameter(pysqlite_Statement* self, int pos, PyObject* parameter, int allow_8bit_chars) { int rc = SQLITE_OK; - PY_LONG_LONG longlongval; const char* buffer; char* string; Py_ssize_t buflen; @@ -120,11 +120,14 @@ } switch (paramtype) { - case TYPE_LONG: - /* in the overflow error case, longval/longlongval is -1, and an exception is set */ - longlongval = PyLong_AsLongLong(parameter); - rc = sqlite3_bind_int64(self->st, pos, (sqlite_int64)longlongval); + case TYPE_LONG: { + sqlite_int64 value = _pysqlite_long_as_int64(parameter); + if (value == -1 && PyErr_Occurred()) + rc = -1; + else + rc = sqlite3_bind_int64(self->st, pos, value); break; + } case TYPE_FLOAT: rc = sqlite3_bind_double(self->st, pos, PyFloat_AsDouble(parameter)); break;
