@@ -833,22 +833,24 @@ save_unconsumed_input(compobject *self, Py_buffer *data, int err)
833833 input data in self->unused_data. */
834834 if (self -> zst .avail_in > 0 ) {
835835 Py_ssize_t old_size = PyBytes_GET_SIZE (self -> unused_data );
836- Py_ssize_t new_size , left_size ;
837- PyObject * new_data ;
836+ Py_ssize_t left_size ;
838837 left_size = (Byte * )data -> buf + data -> len - self -> zst .next_in ;
839838 if (left_size > (PY_SSIZE_T_MAX - old_size )) {
840839 PyErr_NoMemory ();
841840 return -1 ;
842841 }
843- new_size = old_size + left_size ;
844- new_data = PyBytes_FromStringAndSize (NULL , new_size );
845- if (new_data == NULL )
842+ PyBytesWriter * writer = PyBytesWriter_Create (old_size + left_size );
843+ if (writer == NULL ) {
846844 return -1 ;
847- memcpy (PyBytes_AS_STRING (new_data ),
848- PyBytes_AS_STRING (self -> unused_data ), old_size );
849- memcpy (PyBytes_AS_STRING (new_data ) + old_size ,
850- self -> zst .next_in , left_size );
851- Py_SETREF (self -> unused_data , new_data );
845+ }
846+ char * new_data = PyBytesWriter_GetData (writer );
847+ memcpy (new_data , PyBytes_AS_STRING (self -> unused_data ), old_size );
848+ memcpy (new_data + old_size , self -> zst .next_in , left_size );
849+ PyObject * new_unused_data = PyBytesWriter_Finish (writer );
850+ if (new_unused_data == NULL ) {
851+ return -1 ;
852+ }
853+ Py_SETREF (self -> unused_data , new_unused_data );
852854 self -> zst .avail_in = 0 ;
853855 }
854856 }
0 commit comments