Skip to content

Commit abf8e83

Browse files
committed
Allow unlimited buffer sizes
1 parent e031681 commit abf8e83

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/isal/isal_zlibmodule.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,7 +1549,7 @@ GzipReader_read_into_buffer(GzipReader *self, uint8_t *out_buffer, size_t out_bu
15491549
self->stream_phase = GzipReader_DEFLATE_BLOCK;
15501550
case GzipReader_DEFLATE_BLOCK:
15511551
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);
15531553
self->state.next_out = out_buffer;
15541554
self->state.avail_out = Py_MIN(out_buffer_size, UINT32_MAX);
15551555
int ret;
@@ -1567,7 +1567,12 @@ GzipReader_read_into_buffer(GzipReader *self, uint8_t *out_buffer, size_t out_bu
15671567
current_pos = self->state.next_in;
15681568
if (!(self->state.block_state == ISAL_BLOCK_FINISH)) {
15691569
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;
15711576
}
15721577
self->current_pos = current_pos;
15731578
Py_BLOCK_THREADS;
@@ -1645,7 +1650,7 @@ GzipReader_readinto(GzipReader *self, PyObject *buffer_obj)
16451650
return NULL;
16461651
}
16471652
uint8_t *buffer = view.buf;
1648-
size_t buffer_size = Py_MIN(view.len, UINT32_MAX);
1653+
size_t buffer_size = view.len;
16491654
ENTER_ZLIB(self);
16501655
Py_ssize_t written_size = GzipReader_read_into_buffer(self, buffer, buffer_size);
16511656
LEAVE_ZLIB(self);

0 commit comments

Comments
 (0)