Some 64-bit compilers have a 32-bit long, which could result in an
endless loop if uncompressed_size is larger than 4G.
buffers concatenated together, so we uncompress in a loop. */
do
{
- uLongf dst_len = uncompressed_size;
- uLong src_len = compressed_size;
+ uLongf dst_len = (uncompressed_size > ULONG_MAX ? ULONG_MAX
+ : uncompressed_size);
+ uLong src_len = (compressed_size > ULONG_MAX ? ULONG_MAX
+ : compressed_size);
int rc = uncompress2 ((Bytef *) uncompressed_buffer, &dst_len,
(Bytef *) compressed_buffer, &src_len);
if (rc != Z_OK)