`sqlite3.Row()` crashes when given a `Cursor` whose `__init__` was not called
Ouverte
Personne n'a encore pris cette issue.
extension-modules
topic-sqlite3
type-crash
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Crash report
What happened?
sqlite3.Row() reads cursor->description without checking that the cursor was initialized, so a NULL slot segfaults the interpreter:
❯ python3
Python 3.14.6 (main, Jun 10 2026, 18:54:31) [GCC 15.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
... sqlite3.Row(sqlite3.Cursor.__new__(sqlite3.Cursor), ())
...
Segmentation fault (core dumped) python3
A PR is on the way.
CPython versions tested on:
3.14, CPython main branch
Operating systems tested on:
Linux
Output from running 'python -VV' on the command line:
No response
Linked PRs
- gh-156556
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par reproduire la commande avec sqlite3.Row(sqlite3.Cursor.new(sqlite3.Cursor), ()), puis examinez la gestion de sqlite3.Row pour un Cursor non initialisé. Le travail est terminé lorsque la même entrée ne provoque plus de segfault de l’interpréteur et que la couverture de régression démontre le comportement sûr.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python, sqlite
- Domaine
- databases
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 20/100