From 8d65b190d6b8e230af7e3c3c6651d6107017ac3d Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sat, 20 Nov 2021 03:30:28 +0100 Subject: [PATCH] Handle frame image dictionary creation failures. --- server/TracyWorker.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 51bca38f..e057427e 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -8077,13 +8077,23 @@ void Worker::Write( FileWrite& f, bool fiDict ) params.zParams.compressionLevel = 3; auto dict = new char[DictSize]; - const auto finalDictSize = (uint32_t)ZDICT_optimizeTrainFromBuffer_fastCover( dict, DictSize, sdata, ssize, sNum, ¶ms ); - auto zdict = ZSTD_createCDict( dict, finalDictSize, 3 ); + const auto dictret = ZDICT_optimizeTrainFromBuffer_fastCover( dict, DictSize, sdata, ssize, sNum, ¶ms ); + if( dictret <= DictSize ) + { + const auto finalDictSize = uint32_t( dictret ); + auto zdict = ZSTD_createCDict( dict, finalDictSize, 3 ); - f.Write( &finalDictSize, sizeof( finalDictSize ) ); - f.Write( dict, finalDictSize ); + f.Write( &finalDictSize, sizeof( finalDictSize ) ); + f.Write( dict, finalDictSize ); + + ZSTD_freeCDict( zdict ); + } + else + { + uint32_t zero = 0; + f.Write( &zero, sizeof( zero ) ); + } - ZSTD_freeCDict( zdict ); delete[] dict; delete[] ssize; delete[] sdata;