From 4c580067199c4a7fdcacc6961842ee6d3832bb93 Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Tue, 6 Aug 2019 19:08:41 -0400 Subject: Only Bump Offset When Attaching Non-Null Dictionary We do want to bump, even if the dictionary is empty, but we **don't** want to bump if the dictionary is null. --- lib/lz4.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/lz4.c b/lib/lz4.c index 07739a7..877d14e 100644 --- a/lib/lz4.c +++ b/lib/lz4.c @@ -1429,9 +1429,12 @@ int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize) } void LZ4_attach_dictionary(LZ4_stream_t* workingStream, const LZ4_stream_t* dictionaryStream) { - DEBUGLOG(4, "LZ4_attach_dictionary (%p, %p, size %d)", - workingStream, dictionaryStream, dictionaryStream != NULL ? - dictionaryStream->internal_donotuse.dictSize : 0); + const LZ4_stream_t_internal* dictCtx = dictionaryStream == NULL ? NULL : + &(dictionaryStream->internal_donotuse); + + DEBUGLOG(4, "LZ4_attach_dictionary (%p, %p, size %u)", + workingStream, dictionaryStream, + dictCtx != NULL ? dictCtx->dictSize : 0); /* Calling LZ4_resetStream_fast() here makes sure that changes will not be * erased by subsequent calls to LZ4_resetStream_fast() in case stream was @@ -1439,20 +1442,23 @@ void LZ4_attach_dictionary(LZ4_stream_t* workingStream, const LZ4_stream_t* dict */ LZ4_resetStream_fast(workingStream); - /* If the current offset is zero, we will never look in the - * external dictionary context, since there is no value a table - * entry can take that indicate a miss. In that case, we need - * to bump the offset to something non-zero. - */ - if (workingStream->internal_donotuse.currentOffset == 0) { - workingStream->internal_donotuse.currentOffset = 64 KB; - } + if (dictCtx != NULL) { + /* If the current offset is zero, we will never look in the + * external dictionary context, since there is no value a table + * entry can take that indicate a miss. In that case, we need + * to bump the offset to something non-zero. + */ + if (workingStream->internal_donotuse.currentOffset == 0) { + workingStream->internal_donotuse.currentOffset = 64 KB; + } - if (dictionaryStream != NULL && dictionaryStream->internal_donotuse.dictSize > 0) { - workingStream->internal_donotuse.dictCtx = &(dictionaryStream->internal_donotuse); - } else { - workingStream->internal_donotuse.dictCtx = NULL; + /* Don't actually attach an empty dictionary. + */ + if (dictCtx->dictSize == 0) { + dictCtx = NULL; + } } + workingStream->internal_donotuse.dictCtx = dictCtx; } -- cgit v0.12