소스 검색

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 년 전
부모
커밋
693d34fe3d
1개의 변경된 파일7개의 추가작업 그리고 1개의 파일을 삭제
  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,