@@ -1549,7 +1549,7 @@ GzipReader_read_into_buffer(GzipReader *self, uint8_t *out_buffer, size_t out_bu
1549
1549
self -> stream_phase = GzipReader_DEFLATE_BLOCK ;
1550
1550
case GzipReader_DEFLATE_BLOCK :
1551
1551
self -> state .next_in = current_pos ;
1552
- self -> state .avail_in = buffer_end - current_pos ;
1552
+ self -> state .avail_in = Py_MIN (( buffer_end - current_pos ), UINT32_MAX ) ;
1553
1553
self -> state .next_out = out_buffer ;
1554
1554
self -> state .avail_out = Py_MIN (out_buffer_size , UINT32_MAX );
1555
1555
int ret ;
@@ -1567,7 +1567,12 @@ GzipReader_read_into_buffer(GzipReader *self, uint8_t *out_buffer, size_t out_bu
1567
1567
current_pos = self -> state .next_in ;
1568
1568
if (!(self -> state .block_state == ISAL_BLOCK_FINISH )) {
1569
1569
if (out_buffer_size > 0 ) {
1570
- break ;
1570
+ if (current_pos == buffer_end ) {
1571
+ // Need fresh bytes
1572
+ break ;
1573
+ }
1574
+ // Not all input data decompressed.
1575
+ continue ;
1571
1576
}
1572
1577
self -> current_pos = current_pos ;
1573
1578
Py_BLOCK_THREADS ;
@@ -1645,7 +1650,7 @@ GzipReader_readinto(GzipReader *self, PyObject *buffer_obj)
1645
1650
return NULL ;
1646
1651
}
1647
1652
uint8_t * buffer = view .buf ;
1648
- size_t buffer_size = Py_MIN ( view .len , UINT32_MAX ) ;
1653
+ size_t buffer_size = view .len ;
1649
1654
ENTER_ZLIB (self );
1650
1655
Py_ssize_t written_size = GzipReader_read_into_buffer (self , buffer , buffer_size );
1651
1656
LEAVE_ZLIB (self );
0 commit comments