@@ -222,11 +222,10 @@ bytes_fromformat(PyBytesWriter *writer, Py_ssize_t writer_pos,
222222 do { \
223223 size_t len = (len_expr); \
224224 alloc += len; \
225- Py_ssize_t pos = s - (char*)PyBytesWriter_GetData( writer); \
226- if (PyBytesWriter_Resize(writer, alloc) < 0 ) { \
225+ s = PyBytesWriter_ResizeAndUpdatePointer( writer, alloc, s ); \
226+ if (s == NULL ) { \
227227 goto error; \
228228 } \
229- s = (char*)PyBytesWriter_GetData(writer) + pos; \
230229 memcpy(s, (str), len); \
231230 s += len; \
232231 } while (0)
@@ -2889,11 +2888,10 @@ _PyBytes_FromList(PyObject *x)
28892888 }
28902889
28912890 if (i >= size ) {
2892- Py_ssize_t pos = str - ( char * ) PyBytesWriter_GetData ( writer );
2893- if (PyBytesWriter_Resize ( writer , size + 1 ) < 0 ) {
2891+ str = PyBytesWriter_ResizeAndUpdatePointer ( writer , size + 1 , str );
2892+ if (str == NULL ) {
28942893 goto error ;
28952894 }
2896- str = (char * )PyBytesWriter_GetData (writer ) + pos ;
28972895 size = PyBytesWriter_GetAllocated (writer );
28982896 }
28992897 * str ++ = (char ) value ;
@@ -3992,3 +3990,15 @@ PyBytesWriter_Format(PyBytesWriter *writer, const char *format, ...)
39923990 Py_ssize_t size = buf - byteswriter_data (writer );
39933991 return PyBytesWriter_Resize (writer , size );
39943992}
3993+
3994+
3995+ void *
3996+ PyBytesWriter_ResizeAndUpdatePointer (PyBytesWriter * writer , Py_ssize_t size ,
3997+ void * data )
3998+ {
3999+ Py_ssize_t pos = (char * )data - byteswriter_data (writer );
4000+ if (PyBytesWriter_Resize (writer , size ) < 0 ) {
4001+ return NULL ;
4002+ }
4003+ return byteswriter_data (writer ) + pos ;
4004+ }
0 commit comments