Closed
Description
Crash report
What happened?
Most of the code in Modules/_sqlite/row.c
assumes ->description
is a tuple. However, it may be None
. Since it is possible to craft a sqlite3.Row
object "by hand", it is easy to provoke segfauls for paths that involve the PyTuple
API and description == 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.
import sqlite3
cx = 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
Projects
Status
Done