@@ -337,3 +337,46 @@ def compile_module(self, name):
337
337
callfunction = "resize_bytes" ,
338
338
cmpfunc = unhandled_error_compare
339
339
)
340
+
341
+ test_bytearray_buffer = CPyExtFunction (
342
+ lambda args : args [1 ],
343
+ lambda : (
344
+ (bytearray (b"hello_world" ), b"Hello_worlds" ),
345
+ ),
346
+ code = """
347
+ PyObject* test_buffer(PyObject* bytes, PyObject* expected) {
348
+ Py_buffer buffer;
349
+ PyObject* ret;
350
+ if (PyObject_GetBuffer(bytes, &buffer, PyBUF_SIMPLE | PyBUF_WRITABLE) != 0)
351
+ return NULL;
352
+ *(char*)buffer.buf = 'H';
353
+ Py_ssize_t len = PyObject_Size(bytes);
354
+ if (len == -1)
355
+ goto error_release;
356
+ ret = PyObject_CallMethod(bytes, "insert", "ni", len, 'x');
357
+ if (ret != NULL) {
358
+ Py_DECREF(ret);
359
+ PyErr_SetString(PyExc_AssertionError, "insert didn't raise BufferError");
360
+ goto error_release;
361
+ }
362
+ if (!PyErr_ExceptionMatches(PyExc_BufferError))
363
+ goto error_release;
364
+ PyErr_Clear();
365
+ PyBuffer_Release(&buffer);
366
+ ret = PyObject_CallMethod(bytes, "insert", "ni", len, 's');
367
+ if (ret == NULL)
368
+ return NULL;
369
+ Py_DECREF(ret);
370
+ Py_INCREF(bytes);
371
+ return bytes;
372
+ error_release:
373
+ PyBuffer_Release(&buffer);
374
+ return NULL;
375
+ }
376
+ """ ,
377
+ resultspec = "O" ,
378
+ argspec = "OO" ,
379
+ arguments = ["PyObject* bytes" , "PyObject* expected" ],
380
+ callfunction = "test_buffer" ,
381
+ cmpfunc = unhandled_error_compare
382
+ )
0 commit comments