Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.3k
Closed
Description
Crash report
What happened?
Most of the code inModules/_sqlite/row.c assumes->description is a tuple. However, it may beNone. Since it is possible to craft asqlite3.Row object "by hand", it is easy to provoke segfauls for paths that involve thePyTuple API anddescription == Py_None. Any real code would never directly instantiate a row object; it would be implicitly created by the cursor (via the.fetch*() APIs or by iterating on the cursor). However, I don't think we should let a possible segfault hang around.
importsqlite3cx=sqlite3.connect(":memory:")cu=cx.cursor()row=sqlite3.Row(cu, (1,2))row.keys()# <= boom
CPython versions tested on:
3.14, 3.13, 3.12, CPython main branch
Operating systems tested on:
macOS
Output from running 'python -VV' on the command line:
No response
Linked PRs
Metadata
Metadata
Assignees
Labels
Projects
Status
Done