]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
ZSTD_seekable_decompress() example that hangs.
authorMartin Lindsay <m.t.lindsay@gmail.com>
Mon, 22 Feb 2021 15:57:35 +0000 (10:57 -0500)
committerSen Huang <senhuang96@fb.com>
Tue, 2 Mar 2021 22:25:17 +0000 (14:25 -0800)
contrib/seekable_format/tests/seekable_tests.c

index f2556b5180b9f6f8a83c1ef6ebf4337073234b7d..44efe2b010d9e88789d148c727b795bc07cfa10e 100644 (file)
@@ -53,6 +53,60 @@ int main(int argc, const char** argv)
     }
     printf("Success!\n");
 
+    printf("Test %u - check that seekable decompress does not hang: ", testNb++);
+    {   /* Github issue #FIXME */
+        const size_t compressed_size = 27;
+        const uint8_t compressed_data[27] = {
+           '\x28',
+           '\xb5',
+           '\x2f',
+           '\xfd',
+           '\x00',
+           '\x32',
+           '\x91',
+           '\x00',
+           '\x00',
+           '\x00',
+           '\x5e',
+           '\x2a',
+           '\x4d',
+           '\x18',
+           '\x09',
+           '\x00',
+           '\x00',
+           '\x00',
+           '\x00',
+           '\x00',
+           '\x00',
+           '\x00',
+           '\x00',
+           '\xb1',
+           '\xea',
+           '\x92',
+           '\x8f',
+       };
+        const size_t uncompressed_size = 8936;
+        uint8_t uncompressed_data[8936];
+
+        ZSTD_seekable* stream = ZSTD_seekable_create();
+        size_t status = ZSTD_seekable_initBuff(stream, compressed_data, compressed_size);
+        if (ZSTD_isError(status)) {
+            ZSTD_seekable_free(stream);
+            goto _test_error;
+        }
+
+        const size_t offset = 2;
+        /* Should return an error, but not hang */
+        status = ZSTD_seekable_decompress(stream, uncompressed_data, uncompressed_size, offset);
+        if (!ZSTD_isError(status)) {
+            ZSTD_seekable_free(stream);
+            goto _test_error;
+        }
+
+        ZSTD_seekable_free(stream);
+    }
+    printf("Success!\n");
+
     /* TODO: Add more tests */
     printf("Finished tests\n");
     return 0;