sqlite3: Blob crashes when using a negative-step slice
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
What happened?
sqlite3.Blob crashes when you use a negative step in a slice — both for reading and writing.
The sequence operations docs say s[i:j:k] with negative k is valid, and bytearray handles it fine.
import sqlite3
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE t(b BLOB)")
data = b"this blob data string is exactly fifty bytes long!"
con.execute("INSERT INTO t(b) VALUES (?)", (data,))
# bytearray works
ba = bytearray(data)
ba[9:0:-2] = b"12345"
print(ba)
# b't5i4 3l2b1data string is exactly fifty bytes long!'
# Blob crashes
blob = con.blobopen("t", "b", 1)
blob[9:0:-2] = b"12345"
blob.close()
>>> blob[9:0:-2] = b"12345"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
SystemError: Negative size passed to PyBytes_FromStringAndSize
Reading also crashes: blob[9:0:-2] raises the same error.
On Python 3.11.6 and 3.14.5 the error is SystemError: Negative size passed to PyBytes_FromStringAndSize.
On the current main branch read_multiple was changed to use PyBytesWriter_Create, so the message is now ValueError: size must be >= 0 — but the root cause is the same.
CPython versions tested on:
3.11.6, 3.14.5, main(629da5c914b4407e01c1dc06cbcbd8dce825fef3)
Operating systems tested on:
macOS - 26.3.1 (a)(25D771280a)
Related
- gh-142787 / gh-142824 — different bug (assertion failure on empty slice, already fixed)
- https://docs.python.org/3/library/stdtypes.html#typesseq-common (
s[i:j:k], negative k)
I'd like to work on a fix for this. I'll submit a PR.
Linked PRs
- gh-150450
- gh-155773
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 l’implémentation du slicing de sqlite3.Blob et reproduisez les cas signalés avec un pas négatif, aussi bien en lecture qu’en écriture, en utilisant l’exemple de l’issue. Le travail est considéré comme terminé lorsque les slices avec un pas négatif se comportent comme les opérations de séquence documentées sans lever d’erreur liée à la taille ; les PRs associés gh-150450 et gh-155773 montrent que ce travail est déjà en cours.
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
- 25/100