@@ -1451,13 +1451,6 @@ static PyObject *BadGzipFile; // Import BadGzipFile error for consistency
1451
1451
static Py_ssize_t
1452
1452
GzipReader_read_into_buffer (GzipReader * self , uint8_t * out_buffer , size_t out_buffer_size )
1453
1453
{
1454
- if (out_buffer_size > UINT32_MAX ) {
1455
- PyErr_SetString (
1456
- PyExc_RuntimeError ,
1457
- "Internal function GzipReader_read_into_buffer called "
1458
- "with a too large buffer" );
1459
- return -1 ;
1460
- }
1461
1454
Py_ssize_t bytes_written = 0 ;
1462
1455
/* Outer loop is the file read in loop */
1463
1456
while (1 ) {
@@ -1558,7 +1551,7 @@ GzipReader_read_into_buffer(GzipReader *self, uint8_t *out_buffer, size_t out_bu
1558
1551
self -> state .next_in = current_pos ;
1559
1552
self -> state .avail_in = buffer_end - current_pos ;
1560
1553
self -> state .next_out = out_buffer ;
1561
- self -> state .avail_out = out_buffer_size ;
1554
+ self -> state .avail_out = Py_MIN ( out_buffer_size , UINT32_MAX ) ;
1562
1555
int ret ;
1563
1556
ret = isal_inflate (& self -> state );
1564
1557
if (ret != ISAL_DECOMP_OK ) {
@@ -1570,10 +1563,10 @@ GzipReader_read_into_buffer(GzipReader *self, uint8_t *out_buffer, size_t out_bu
1570
1563
bytes_written += current_bytes_written ;
1571
1564
self -> _pos += current_bytes_written ;
1572
1565
out_buffer = self -> state .next_out ;
1573
- out_buffer_size = self -> state . avail_out ;
1566
+ out_buffer_size -= current_bytes_written ;
1574
1567
current_pos = self -> state .next_in ;
1575
1568
if (!(self -> state .block_state == ISAL_BLOCK_FINISH )) {
1576
- if (self -> state . avail_out > 0 ) {
1569
+ if (out_buffer_size > 0 ) {
1577
1570
break ;
1578
1571
}
1579
1572
self -> current_pos = current_pos ;
0 commit comments