]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
[largeNbDicts] Second try at fixing decompression segfault to always create compressI... 3209/head
authorHan Zhu <zhuhan7737@gmail.com>
Wed, 20 Jul 2022 23:01:32 +0000 (16:01 -0700)
committerHan Zhu <zhuhan7737@gmail.com>
Thu, 21 Jul 2022 18:55:01 +0000 (11:55 -0700)
Summary:
Freeing an uninitialized pointer is undefined behavior. This caused a segfault
when compiling the benchmark with Clang -O3 and benching decompression.

V2: always create compressInstructions but check if cctxParams is NULL before
setting CCtx params to avoid segfault.

Test Plan:
make and run

contrib/largeNbDicts/largeNbDicts.c

index 72b4b41e9c2bfae9bd5d07e71fffe48f5cb9d530..cc489000ff03e1fe99341cf78e45cac1acafb85f 100644 (file)
@@ -582,7 +582,8 @@ compressInstructions createCompressInstructions(cdict_collection_t dictionaries,
     compressInstructions ci;
     ci.cctx = ZSTD_createCCtx();
     CONTROL(ci.cctx != NULL);
-    ZSTD_CCtx_setParametersUsingCCtxParams(ci.cctx, cctxParams);
+    if (cctxParams)
+      ZSTD_CCtx_setParametersUsingCCtxParams(ci.cctx, cctxParams);
     ci.nbDicts = dictionaries.nbCDict;
     ci.dictNb = 0;
     ci.dictionaries = dictionaries;
@@ -697,9 +698,8 @@ static int benchMem(slice_collection_t dstBlocks, slice_collection_t srcBlocks,
             BMK_createTimedFnState(total_time_ms, ms_per_round);
 
     decompressInstructions di = createDecompressInstructions(ddictionaries);
-    compressInstructions ci;
-    if (benchCompression)
-      ci = createCompressInstructions(cdictionaries, cctxParams);
+    compressInstructions ci =
+        createCompressInstructions(cdictionaries, cctxParams);
     void* payload = benchCompression ? (void*)&ci : (void*)&di;
     BMK_benchParams_t const bp = {
         .benchFn = benchCompression ? compress : decompress,