Skip to content

Commit e031681

Browse files
committed
Do not disallow large output buffers
1 parent 40ccffd commit e031681

File tree

1 file changed

+3
-10
lines changed

1 file changed

+3
-10
lines changed

src/isal/isal_zlibmodule.c

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1451,13 +1451,6 @@ static PyObject *BadGzipFile; // Import BadGzipFile error for consistency
14511451
static Py_ssize_t
14521452
GzipReader_read_into_buffer(GzipReader *self, uint8_t *out_buffer, size_t out_buffer_size)
14531453
{
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-
}
14611454
Py_ssize_t bytes_written = 0;
14621455
/* Outer loop is the file read in loop */
14631456
while (1) {
@@ -1558,7 +1551,7 @@ GzipReader_read_into_buffer(GzipReader *self, uint8_t *out_buffer, size_t out_bu
15581551
self->state.next_in = current_pos;
15591552
self->state.avail_in = buffer_end - current_pos;
15601553
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);
15621555
int ret;
15631556
ret = isal_inflate(&self->state);
15641557
if (ret != ISAL_DECOMP_OK) {
@@ -1570,10 +1563,10 @@ GzipReader_read_into_buffer(GzipReader *self, uint8_t *out_buffer, size_t out_bu
15701563
bytes_written += current_bytes_written;
15711564
self->_pos += current_bytes_written;
15721565
out_buffer = self->state.next_out;
1573-
out_buffer_size = self->state.avail_out;
1566+
out_buffer_size -= current_bytes_written;
15741567
current_pos = self->state.next_in;
15751568
if (!(self->state.block_state == ISAL_BLOCK_FINISH)) {
1576-
if (self->state.avail_out > 0) {
1569+
if (out_buffer_size > 0) {
15771570
break;
15781571
}
15791572
self->current_pos = current_pos;

0 commit comments

Comments
 (0)