Browse Source

LibCompress: Write Deflate window size in the Zlib header

Previously we said that the window size was always 512 bytes, which
caused errors during decompressing in apps outside of Serenity that
actually use this information.
Now, the value is always 7 (32 KiB).

Fixes: #14503
Karol Kosek 3 years ago
parent
commit
693d34fe3d
1 changed files with 7 additions and 1 deletions
  1. 7 1
      Userland/Libraries/LibCompress/Zlib.cpp

+ 7 - 1
Userland/Libraries/LibCompress/Zlib.cpp

@@ -84,9 +84,15 @@ ZlibCompressor::~ZlibCompressor()
 
 void ZlibCompressor::write_header(ZlibCompressionMethod compression_method, ZlibCompressionLevel compression_level)
 {
+    u8 compression_info = 0;
+    if (compression_method == ZlibCompressionMethod::Deflate) {
+        compression_info = AK::log2(DeflateCompressor::window_size) - 8;
+        VERIFY(compression_info <= 7);
+    }
+
     ZlibHeader header {
         .compression_method = compression_method,
-        .compression_info = 0,
+        .compression_info = compression_info,
         .check_bits = 0,
         .present_dictionary = false,
         .compression_level = compression_level,