sqlite3: Blob crashes when using a negative-step slice
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 77.2k
- フォーク
- 35.9k
- PR マージ指標
- PR 指標を取得中
説明
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
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
sqlite3.Blob のスライシング実装から始め、issue の例を使って、読み取りと書き込みの両方で報告されている負のステップのケースを再現します。負のステップのスライスが、サイズ関連のエラーを発生させずに、ドキュメント化されたシーケンス操作と同じように動作すれば完了です。リンクされている PR gh-150450 と gh-155773 は、すでに作業が進行中であることを示しています。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python, sqlite
- 領域
- databases
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 25/100