From 202ed82c36df84285d29622a5aa88c03d7598f37 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Thu, 25 Sep 2025 12:28:49 +0200 Subject: [PATCH] Fix iron_inflate and iron_deflate --- base/sources/iron.h | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/base/sources/iron.h b/base/sources/iron.h index b48a2383..e24b9f54 100644 --- a/base/sources/iron.h +++ b/base/sources/iron.h @@ -1596,13 +1596,16 @@ void iron_delete_file(char *path) { #ifdef WITH_COMPRESS buffer_t *iron_inflate(buffer_t *bytes, bool raw) { - unsigned char *inflated; + unsigned char *inflated = NULL; int inflated_len = bytes->length * 2; - int out_len = -1; - while (out_len == -1) { - inflated_len *= 2; + int out_len; + while(1) { inflated = (unsigned char *)realloc(inflated, inflated_len); - out_len = sinflate(inflated, inflated_len, bytes->buffer, bytes->length); + out_len = raw ? sinflate(inflated, inflated_len, bytes->buffer, bytes->length) : zsinflate(inflated, inflated_len, bytes->buffer, bytes->length); + if (out_len >= 0 && out_len < inflated_len) { + break; + } + inflated_len *= 2; } buffer_t *output = buffer_create(0); output->buffer = inflated; @@ -1614,8 +1617,7 @@ buffer_t *iron_deflate(buffer_t *bytes, bool raw) { struct sdefl sdefl; memset(&sdefl, 0, sizeof(sdefl)); void *deflated = malloc(sdefl_bound(bytes->length)); - // raw == sdeflate - int out_len = zsdeflate(&sdefl, deflated, bytes->buffer, bytes->length, SDEFL_LVL_MIN); + int out_len = raw ? sdeflate(&sdefl, deflated, bytes->buffer, bytes->length, SDEFL_LVL_MIN) : zsdeflate(&sdefl, deflated, bytes->buffer, bytes->length, SDEFL_LVL_MIN); buffer_t *output = buffer_create(0); output->buffer = deflated; output->length = out_len;