]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
fix #942 : streaming interface does not compress after ZSTD_initCStream()
authorYann Collet <cyan@fb.com>
Thu, 7 Dec 2017 07:52:50 +0000 (02:52 -0500)
committerYann Collet <cyan@fb.com>
Thu, 7 Dec 2017 07:52:50 +0000 (02:52 -0500)
While the final result is still, technically, a frame,
the resulting frame expands initial data instead of compressing it.
This is because the streaming API creates a tiny 1-byte buffer for input,
because it believes input is empty (0-bytes),
because in the past, 0 used to mean "unknown" instead.

This patch fixes the issue.
Todo : add a test which traps the issue.

lib/compress/zstd_compress.c

index 8d493852ffa81c4cd46cfe8bcb40824bc6c544a6..69b0d64026b1cc58c18686b12cf3715228749fb1 100644 (file)
@@ -2466,6 +2466,7 @@ size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx,
 
 ZSTD_CStream* ZSTD_createCStream(void)
 {
+    DEBUGLOG(3, "ZSTD_createCStream");
     return ZSTD_createCStream_advanced(ZSTD_defaultCMem);
 }
 
@@ -2633,7 +2634,8 @@ size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, int compressionLevel, unsigne
 
 size_t ZSTD_initCStream(ZSTD_CStream* zcs, int compressionLevel)
 {
-    return ZSTD_initCStream_srcSize(zcs, compressionLevel, 0);
+    DEBUGLOG(4, "ZSTD_initCStream");
+    return ZSTD_initCStream_srcSize(zcs, compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN);
 }
 
 /*======   Compression   ======*/