]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Added unit test for inflate with Z_FINISH and no window.
authorNathan Moinvaziri <nathan@nathanm.com>
Wed, 22 Nov 2023 06:30:45 +0000 (22:30 -0800)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Thu, 23 Nov 2023 12:43:51 +0000 (13:43 +0100)
This test decompresses a small git pack object with the text:
"alone in the dark". By providing inflate with Z_FINISH, it should not use a
sliding window according to zlib docs. We purposefully limit the read buffer
size to trigger CHECK mode to bail early.

test/GH-1600/packobj.gz [new file with mode: 0644]
test/cmake/test-issues.cmake
test/minideflate.c

diff --git a/test/GH-1600/packobj.gz b/test/GH-1600/packobj.gz
new file mode 100644 (file)
index 0000000..d6c4405
Binary files /dev/null and b/test/GH-1600/packobj.gz differ
index 1ffb3abda414322d7c5de3f5fba001325367db55..05a350004240cdb97fcadf6ebc1177736be84c39 100644 (file)
@@ -66,3 +66,11 @@ add_test(NAME GH-751
     -DTEST_NAME=GH-751-test-txt
     -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/GH-751/test.txt
     -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
+
+set(TEST_COMMAND ${MINIDEFLATE_COMMAND} 
+    "-d;-k;-s;4;${CMAKE_CURRENT_SOURCE_DIR}/GH-1600/packobj.gz")
+add_test(NAME GH-1600-no-window-check COMMAND ${TEST_COMMAND})
+
+set(TEST_COMMAND ${MINIDEFLATE_COMMAND} 
+    "-d;-k;-s;4;-r;25;${CMAKE_CURRENT_SOURCE_DIR}/GH-1600/packobj.gz")
+add_test(NAME GH-1600-no-window-no-check COMMAND ${TEST_COMMAND})
index 61fbe43cb636d821a318f5883b2467aadb06874f..6b16a032d9430bfa72bd4c54a30889940388a039 100644 (file)
@@ -167,6 +167,12 @@ void inflate_params(FILE *fin, FILE *fout, int32_t read_buf_size, int32_t write_
 
         do {
             err = PREFIX(inflate)(&d_stream, flush);
+
+            /* Ignore Z_BUF_ERROR if we are finishing and read buffer size is 
+             * purposefully limited */
+            if (flush == Z_FINISH && err == Z_BUF_ERROR && read_buf_size != BUFSIZE)
+                err = Z_OK;
+
             if (err == Z_STREAM_END) break;
             CHECK_ERR(err, "inflate");