]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
seekable_format no header when compressing empty string to stream 3058/head
authoryhoogstrate <y.hoogstrate@gmail.com>
Tue, 8 Feb 2022 13:06:00 +0000 (14:06 +0100)
committeryhoogstrate <y.hoogstrate@gmail.com>
Tue, 8 Feb 2022 13:06:00 +0000 (14:06 +0100)
contrib/seekable_format/tests/seekable_tests.c
contrib/seekable_format/zstdseek_compress.c

index a482638b91876a090f6dafaf09e0dec1acffc9ea..cf98e734f48edc69f30c0d7c2050f79a13f9267e 100644 (file)
@@ -186,6 +186,36 @@ int main(int argc, const char** argv)
     }
     printf("Success!\n");
 
+
+    printf("Test %u - check ZSTD magic in compressing empty string: ", testNb++);
+    { // compressing empty string should return a zstd header
+        char *data_in = (char *) malloc(255 * sizeof(char));
+        assert(data_in != NULL);
+        data_in = "\0";
+
+        char *data_out = (char *) malloc(255 * 255 * sizeof(char));
+        assert(data_out != NULL);
+
+        ZSTD_seekable_CStream *s = ZSTD_seekable_createCStream();
+        ZSTD_seekable_initCStream(s, 1, 1, 1024 * 1024);
+
+        ZSTD_inBuffer input = { data_in, 0, 0 };
+        ZSTD_outBuffer output = { data_out, 255*255, 0 };
+
+        ZSTD_seekable_compressStream(s, &output, &input);
+        ZSTD_seekable_endStream(s, &output);
+
+        if((((char*)output.dst)[0] != '\x28') | (((char*)output.dst)[1] != '\xb5') | (((char*)output.dst)[2] != '\x2f') | (((char*)output.dst)[3] != '\xfd')) {
+            printf("%#02x %#02x %#02x %#02x\n", ((char*)output.dst)[0], ((char*)output.dst)[1] , ((char*)output.dst)[2] , ((char*)output.dst)[3] );
+
+            ZSTD_seekable_freeCStream(s);
+            goto _test_error;
+        }
+
+        ZSTD_seekable_freeCStream(s);
+    }
+    printf("Success!\n");
+
     /* TODO: Add more tests */
     printf("Finished tests\n");
     return 0;
index 242bd2ac3a167f96205fb057a03c9ac4d90ee118..7ec9bb577ce3533d9118f09fe731e547b0673341 100644 (file)
@@ -350,7 +350,7 @@ size_t ZSTD_seekable_writeSeekTable(ZSTD_frameLog* fl, ZSTD_outBuffer* output)
 
 size_t ZSTD_seekable_endStream(ZSTD_seekable_CStream* zcs, ZSTD_outBuffer* output)
 {
-    if (!zcs->writingSeekTable && zcs->frameDSize) {
+    if (!zcs->writingSeekTable) {
         const size_t endFrame = ZSTD_seekable_endFrame(zcs, output);
         if (ZSTD_isError(endFrame)) return endFrame;
         /* return an accurate size hint */