@@ -2833,6 +2833,7 @@ _PyBytes_FromList(PyObject *x)
28332833        return  NULL ;
28342834    }
28352835
2836+     Py_ssize_t  extend  =  1 ;
28362837    for  (Py_ssize_t  i  =  0 ; i  <  PyList_GET_SIZE (x ); i ++ ) {
28372838        PyObject  * item  =  PyList_GET_ITEM (x , i );
28382839        Py_INCREF (item );
@@ -2849,12 +2850,15 @@ _PyBytes_FromList(PyObject *x)
28492850
28502851        if  (i  >= size ) {
28512852            // The list was extended by a previous PyNumber_AsSsize_t() call 
2852-             Py_ssize_t  extend  =  PyBytesWriter_GetAllocated (writer ) -  size  +  1 ;
28532853            str  =  PyBytesWriter_Extend (writer , str , extend );
28542854            if  (str  ==  NULL ) {
28552855                goto error ;
28562856            }
28572857            size  +=  extend ;
2858+ 
2859+             if  (extend  <= PY_SSIZE_T_MAX  / 2 ) {
2860+                 extend  *= 2 ;
2861+             }
28582862        }
28592863        * str ++  =  (char ) value ;
28602864    }
@@ -2910,6 +2914,7 @@ _PyBytes_FromIterator(PyObject *it, PyObject *x)
29102914    }
29112915
29122916    /* Run the iterator to exhaustion */ 
2917+     Py_ssize_t  extend  =  1 ;
29132918    for  (Py_ssize_t  i  =  0 ; ; i ++ ) {
29142919        PyObject  * item ;
29152920        Py_ssize_t  value ;
@@ -2938,12 +2943,15 @@ _PyBytes_FromIterator(PyObject *it, PyObject *x)
29382943        /* Append the byte */ 
29392944        if  (i  >= size ) {
29402945            // The list was extended by a previous PyNumber_AsSsize_t() call 
2941-             Py_ssize_t  extend  =  PyBytesWriter_GetAllocated (writer ) -  size  +  1 ;
29422946            str  =  PyBytesWriter_Extend (writer , str , extend );
29432947            if  (str  ==  NULL ) {
29442948                goto error ;
29452949            }
29462950            size  +=  extend ;
2951+ 
2952+             if  (extend  <= PY_SSIZE_T_MAX  / 2 ) {
2953+                 extend  *= 2 ;
2954+             }
29472955        }
29482956        * str ++  =  (char ) value ;
29492957    }
@@ -3643,21 +3651,6 @@ PyBytesWriter_GetRemaining(PyBytesWriter *writer, void *buf)
36433651}
36443652
36453653
3646- Py_ssize_t 
3647- PyBytesWriter_GetAllocated (PyBytesWriter  * writer )
3648- {
3649-     if  (writer -> obj  ==  NULL ) {
3650-         return  sizeof (writer -> small_buffer );
3651-     }
3652-     else  if  (writer -> use_bytearray ) {
3653-         return  PyByteArray_GET_SIZE (writer -> obj );
3654-     }
3655-     else  {
3656-         return  PyBytes_GET_SIZE (writer -> obj );
3657-     }
3658- }
3659- 
3660- 
36613654void * 
36623655PyBytesWriter_Extend (PyBytesWriter  * writer , void  * buf , Py_ssize_t  extend )
36633656{
0 commit comments