]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
IBM zSystems: Fix calling deflateBound() before deflateInit() 2.0.x
authorIlya Leoshkevich <iii@linux.ibm.com>
Wed, 19 Apr 2023 14:03:18 +0000 (16:03 +0200)
committerHans Kristian Rosbach <hk-git@circlestorm.org>
Tue, 25 Apr 2023 10:17:52 +0000 (12:17 +0200)
Even though zlib officialy forbids calling deflateBound() before
deflateInit(), Firefox does this anyway, and it happens to work [1],
but unfortunately not with DFLTCC [2], because the DFLTCC code assumes
that the deflate state is allocated, and segfaults when it isn't.

Bow down before Hyrum's Law and add deflateStateCheck() to
DEFLATE_BOUND_ADJUST_COMPLEN().

[1] https://searchfox.org/mozilla-esr102/source/dom/script/ScriptCompression.cpp#97
[2] https://bugzilla.suse.com/show_bug.cgi?id=1210593

arch/s390/dfltcc_deflate.h

index 218e5946932de08b60f8b8943ed713eca493fe83..1081b27499bf3eeb7ae67c31dcd2959b20852f46 100644 (file)
@@ -40,7 +40,7 @@ int Z_INTERNAL dfltcc_deflate_get_dictionary(PREFIX3(streamp) strm, unsigned cha
 
 #define DEFLATE_BOUND_ADJUST_COMPLEN(strm, complen, source_len) \
     do { \
-        if (dfltcc_can_deflate((strm))) \
+        if (deflateStateCheck((strm)) || dfltcc_can_deflate((strm))) \
             (complen) = DEFLATE_BOUND_COMPLEN(source_len); \
     } while (0)