File tree Expand file tree Collapse file tree 3 files changed +20
-12
lines changed Expand file tree Collapse file tree 3 files changed +20
-12
lines changed Original file line number Diff line number Diff line change @@ -255,7 +255,9 @@ def test_number2(self):
255
255
def test_convert_zero_sized_blob (self ):
256
256
self .con .execute ("insert into test(cbin) values (?)" , (b"" ,))
257
257
cur = self .con .execute ("select cbin from test" )
258
- self .assertEqual (cur .fetchone ()[0 ], b"blobish" )
258
+ # Zero-sized blobs with converters returns None. This differs from
259
+ # blobs without a converter, where b"" is returned.
260
+ self .assertIsNone (cur .fetchone ()[0 ])
259
261
260
262
261
263
class ColNamesTests (unittest .TestCase ):
Original file line number Diff line number Diff line change
1
+ Fix :mod: `sqlite3 ` regression for zero-sized blobs with converters, where
2
+ ``b"" `` was returned instead of ``None ``. The regression was introduced by
3
+ GH-24723. Patch by Erlend E. Aasland.
Original file line number Diff line number Diff line change @@ -240,7 +240,6 @@ _pysqlite_fetch_one_row(pysqlite_Cursor* self)
240
240
{
241
241
int i , numcols ;
242
242
PyObject * row ;
243
- PyObject * item = NULL ;
244
243
int coltype ;
245
244
PyObject * converter ;
246
245
PyObject * converted ;
@@ -282,18 +281,22 @@ _pysqlite_fetch_one_row(pysqlite_Cursor* self)
282
281
*/
283
282
if (converter != Py_None ) {
284
283
const void * blob = sqlite3_column_blob (self -> statement -> st , i );
285
- if (blob == NULL && sqlite3_errcode (db ) == SQLITE_NOMEM ) {
286
- PyErr_NoMemory ();
287
- goto error ;
284
+ if (blob == NULL ) {
285
+ if (sqlite3_errcode (db ) == SQLITE_NOMEM ) {
286
+ PyErr_NoMemory ();
287
+ goto error ;
288
+ }
289
+ converted = Py_NewRef (Py_None );
288
290
}
289
-
290
- nbytes = sqlite3_column_bytes (self -> statement -> st , i );
291
- item = PyBytes_FromStringAndSize (blob , nbytes );
292
- if (item == NULL ) {
293
- goto error ;
291
+ else {
292
+ nbytes = sqlite3_column_bytes (self -> statement -> st , i );
293
+ PyObject * item = PyBytes_FromStringAndSize (blob , nbytes );
294
+ if (item == NULL ) {
295
+ goto error ;
296
+ }
297
+ converted = PyObject_CallOneArg (converter , item );
298
+ Py_DECREF (item );
294
299
}
295
- converted = PyObject_CallOneArg (converter , item );
296
- Py_DECREF (item );
297
300
} else {
298
301
Py_BEGIN_ALLOW_THREADS
299
302
coltype = sqlite3_column_type (self -> statement -> st , i );
You can’t perform that action at this time.
0 commit comments