mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
gh-100370: fix OverflowError in sqlite3.Connection.blobopen for 32-bit builds (#103902)
This commit is contained in:
parent
cab1298a60
commit
a05bad3254
4 changed files with 36 additions and 9 deletions
|
@ -118,6 +118,20 @@ autocommit_converter(PyObject *val, enum autocommit_mode *result)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sqlite3_int64_converter(PyObject *obj, sqlite3_int64 *result)
|
||||
{
|
||||
if (!PyLong_Check(obj)) {
|
||||
PyErr_SetString(PyExc_TypeError, "expected 'int'");
|
||||
return 0;
|
||||
}
|
||||
*result = _pysqlite_long_as_int64(obj);
|
||||
if (PyErr_Occurred()) {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define clinic_state() (pysqlite_get_state_by_type(Py_TYPE(self)))
|
||||
#include "clinic/connection.c.h"
|
||||
#undef clinic_state
|
||||
|
@ -188,8 +202,12 @@ class Autocommit_converter(CConverter):
|
|||
type = "enum autocommit_mode"
|
||||
converter = "autocommit_converter"
|
||||
|
||||
class sqlite3_int64_converter(CConverter):
|
||||
type = "sqlite3_int64"
|
||||
converter = "sqlite3_int64_converter"
|
||||
|
||||
[python start generated code]*/
|
||||
/*[python end generated code: output=da39a3ee5e6b4b0d input=bc2aa6c7ba0c5f8f]*/
|
||||
/*[python end generated code: output=da39a3ee5e6b4b0d input=dff8760fb1eba6a1]*/
|
||||
|
||||
// NB: This needs to be in sync with the sqlite3.connect docstring
|
||||
/*[clinic input]
|
||||
|
@ -483,7 +501,7 @@ _sqlite3.Connection.blobopen as blobopen
|
|||
Table name.
|
||||
column as col: str
|
||||
Column name.
|
||||
row: int
|
||||
row: sqlite3_int64
|
||||
Row index.
|
||||
/
|
||||
*
|
||||
|
@ -497,8 +515,8 @@ Open and return a BLOB object.
|
|||
|
||||
static PyObject *
|
||||
blobopen_impl(pysqlite_Connection *self, const char *table, const char *col,
|
||||
int row, int readonly, const char *name)
|
||||
/*[clinic end generated code: output=0c8e2e58516d0b5c input=fa73c83aa7a7ddee]*/
|
||||
sqlite3_int64 row, int readonly, const char *name)
|
||||
/*[clinic end generated code: output=6a02d43efb885d1c input=23576bd1108d8774]*/
|
||||
{
|
||||
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
|
||||
return NULL;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue