You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
sqlite3.Connection.blobopen() can fail with OverflowError on large rowids #100370
blobopen internally uses int to hold the requested rowid ([1], [2]), but SQLite rowids are actually 64-bit integers:
int sqlite3_blob_open(
sqlite3*,
const char *zDb,
const char *zTable,
const char *zColumn,
sqlite3_int64 iRow, // <-- the rowid parameter
int flags,
sqlite3_blob **ppBlob
);
This makes an attempt to open a blob with large rowid raise an OverflowError when Python is compiled with 32-bit int, which is the case on Windows even when compiling as 64-bit application.
This might seem like an edge case, but any INTEGER PRIMARY KEY in a rowid table aliases rowid, which means any application that uses non-autoincrement primary keys (e.g. timestamps, checksums) is likely to hit this very trivially -- I know I did on basically the first insert. You don't need to have more than 2**32 rows or anything like that for this to happen.
Traceback (most recent call last):
File "E:\Temp\blob.py", line 10, in <module>
con.blobopen('t', 't', rowid)
OverflowError: Python int too large to convert to C int
Your environment
CPython versions tested on: 3.11.0 (main, Oct 24 2022, 18:26:48) [MSC v.1933 64 bit (AMD64)], 3.12.0a3+ (heads/main-dirty:cb60b6131b, Dec 20 2022, 14:37:41) [MSC v.1934 64 bit (AMD64)]
Activity
erlend-aasland commentedon Apr 26, 2023
Sorry for the late reply. I'm preparing a PR for this; I'll put it up tomorrow.
pythongh-100370: fix OverflowError in sqlite3.Connection.blobopen for…
pythongh-100370: fix OverflowError in sqlite3.Connection.blobopen for…
gh-100370: fix OverflowError in sqlite3.Connection.blobopen for 32-bi…
[3.11] pythongh-100370: fix OverflowError in sqlite3.Connection.blobo…
[3.11] gh-100370: fix OverflowError in sqlite3.Connection.blobopen fo…
pythongh-100370: fix OverflowError in sqlite3.Connection.blobopen for…