From cd3e9b3fd28072758b412e758df1b67c19ae01b0 Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Fri, 27 Feb 2026 01:13:08 +0100 Subject: [PATCH] [3.13] gh-142787: Handle empty sqlite3 blob slices (GH-142824) (#145298) (cherry picked from commit 06b0920f1292690a22ab2b271dfefe2c63cacf07) Co-authored-by: A.Ibrahim --- Lib/test/test_sqlite3/test_dbapi.py | 5 +++++ .../Library/2025-12-16-13-34-48.gh-issue-142787.wNitJX.rst | 2 ++ Modules/_sqlite/blob.c | 4 ++++ 3 files changed, 11 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2025-12-16-13-34-48.gh-issue-142787.wNitJX.rst diff --git a/Lib/test/test_sqlite3/test_dbapi.py b/Lib/test/test_sqlite3/test_dbapi.py index 7ad4136350c..4d815bc3d59 100644 --- a/Lib/test/test_sqlite3/test_dbapi.py +++ b/Lib/test/test_sqlite3/test_dbapi.py @@ -1410,6 +1410,11 @@ def test_blob_get_slice(self): def test_blob_get_empty_slice(self): self.assertEqual(self.blob[5:5], b"") + def test_blob_get_empty_slice_oob_indices(self): + self.cx.execute("insert into test(b) values (?)", (b"abc",)) + with self.cx.blobopen("test", "b", 2) as blob: + self.assertEqual(blob[5:-5], b"") + def test_blob_get_slice_negative_index(self): self.assertEqual(self.blob[5:-5], self.data[5:-5]) diff --git a/Misc/NEWS.d/next/Library/2025-12-16-13-34-48.gh-issue-142787.wNitJX.rst b/Misc/NEWS.d/next/Library/2025-12-16-13-34-48.gh-issue-142787.wNitJX.rst new file mode 100644 index 00000000000..e928bd2cac7 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-12-16-13-34-48.gh-issue-142787.wNitJX.rst @@ -0,0 +1,2 @@ +Fix assertion failure in :mod:`sqlite3` blob subscript when slicing with +indices that result in an empty slice. diff --git a/Modules/_sqlite/blob.c b/Modules/_sqlite/blob.c index 6ad3f9c0968..4db1ac474ef 100644 --- a/Modules/_sqlite/blob.c +++ b/Modules/_sqlite/blob.c @@ -428,6 +428,10 @@ subscript_slice(pysqlite_Blob *self, PyObject *item) return NULL; } + if (len == 0) { + return PyBytes_FromStringAndSize(NULL, 0); + } + if (step == 1) { return read_multiple(self, len, start); }