@@ -143,23 +143,23 @@ read_multiple(pysqlite_Blob *self, Py_ssize_t length, Py_ssize_t offset)
143
143
assert (length <= sqlite3_blob_bytes (self -> blob ));
144
144
assert (offset < sqlite3_blob_bytes (self -> blob ));
145
145
146
- PyObject * buffer = PyBytes_FromStringAndSize ( NULL , length );
147
- if (buffer == NULL ) {
146
+ PyBytesWriter * writer = PyBytesWriter_Create ( length );
147
+ if (writer == NULL ) {
148
148
return NULL ;
149
149
}
150
+ char * raw_buffer = PyBytesWriter_GetData (writer );
150
151
151
- char * raw_buffer = PyBytes_AS_STRING (buffer );
152
152
int rc ;
153
153
Py_BEGIN_ALLOW_THREADS
154
154
rc = sqlite3_blob_read (self -> blob , raw_buffer , (int )length , (int )offset );
155
155
Py_END_ALLOW_THREADS
156
156
157
157
if (rc != SQLITE_OK ) {
158
- Py_DECREF ( buffer );
158
+ PyBytesWriter_Discard ( writer );
159
159
blob_seterror (self , rc );
160
160
return NULL ;
161
161
}
162
- return buffer ;
162
+ return PyBytesWriter_Finish ( writer ) ;
163
163
}
164
164
165
165
@@ -196,7 +196,7 @@ blob_read_impl(pysqlite_Blob *self, int length)
196
196
197
197
assert (length >= 0 );
198
198
if (length == 0 ) {
199
- return PyBytes_FromStringAndSize ( NULL , 0 );
199
+ return Py_GetConstant ( Py_CONSTANT_EMPTY_BYTES );
200
200
}
201
201
202
202
PyObject * buffer = read_multiple (self , length , self -> offset );
@@ -440,20 +440,25 @@ subscript_slice(pysqlite_Blob *self, PyObject *item)
440
440
if (step == 1 ) {
441
441
return read_multiple (self , len , start );
442
442
}
443
+
443
444
PyObject * blob = read_multiple (self , stop - start , start );
444
445
if (blob == NULL ) {
445
446
return NULL ;
446
447
}
447
- PyObject * result = PyBytes_FromStringAndSize (NULL , len );
448
- if (result != NULL ) {
449
- char * blob_buf = PyBytes_AS_STRING (blob );
450
- char * res_buf = PyBytes_AS_STRING (result );
451
- for (Py_ssize_t i = 0 , j = 0 ; i < len ; i ++ , j += step ) {
452
- res_buf [i ] = blob_buf [j ];
453
- }
448
+
449
+ PyBytesWriter * writer = PyBytesWriter_Create (len );
450
+ if (writer == NULL ) {
454
451
Py_DECREF (blob );
452
+ return NULL ;
453
+ }
454
+ char * res_buf = PyBytesWriter_GetData (writer );
455
+
456
+ char * blob_buf = PyBytes_AS_STRING (blob );
457
+ for (Py_ssize_t i = 0 , j = 0 ; i < len ; i ++ , j += step ) {
458
+ res_buf [i ] = blob_buf [j ];
455
459
}
456
- return result ;
460
+ Py_DECREF (blob );
461
+ return PyBytesWriter_Finish (writer );
457
462
}
458
463
459
464
static PyObject *
0 commit comments