From 6255f994d35219b60d3df21535c72675d5d6a98f Mon Sep 17 00:00:00 2001 From: Han Zhu Date: Wed, 20 Jul 2022 16:01:32 -0700 Subject: [PATCH] [largeNbDicts] Second try at fixing decompression segfault to always create compressInstructions 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 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contrib/largeNbDicts/largeNbDicts.c b/contrib/largeNbDicts/largeNbDicts.c index 72b4b41e9..cc489000f 100644 --- a/contrib/largeNbDicts/largeNbDicts.c +++ b/contrib/largeNbDicts/largeNbDicts.c @@ -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,