]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Try to fix unzip function
authorVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 9 Sep 2023 11:25:31 +0000 (12:25 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 9 Sep 2023 11:25:31 +0000 (12:25 +0100)
src/libutil/util.c

index deba3e80765177e60c7b471a3d0120f312b6d662..d3c4721bdb321ee5732ee72d4a7c08cba14e900e 100644 (file)
@@ -2295,21 +2295,20 @@ rspamd_fstring_gunzip(rspamd_fstring_t **in)
        gsize total_out = 0;
 
        do {
-               strm.next_out = out->str;
-               strm.avail_out = out->allocated;
+               strm.next_out = out->str + total_out;
+               strm.avail_out = out->allocated - total_out;
 
                ret = inflate(&strm, Z_NO_FLUSH);
                if (ret != Z_OK && ret != Z_STREAM_END && ret != Z_BUF_ERROR) {
                        break;
                }
 
-               gsize out_size = out->allocated - strm.avail_out;
-               if (total_out + out_size > out->allocated) {
-                       out = rspamd_fstring_grow(out, total_out + out_size);
+               gsize out_remain = strm.avail_out;
+               total_out = out->allocated - out_remain;
+               if (out_remain == 0 && ret != Z_STREAM_END) {
+                       out = rspamd_fstring_grow(out, out->allocated * 2);
                }
 
-               total_out += out_size;
-
        } while (ret != Z_STREAM_END);
 
        if (ret == Z_STREAM_END) {