From: W. Felix Handte Date: Tue, 17 Apr 2018 18:01:44 +0000 (-0400) Subject: Always Bump Offset by 64 KB in LZ4_loadDict() X-Git-Tag: upstream/1.9.3~8^2~34^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=aedc44780468c11d90114bc1d6124af545bfc652;p=platform%2Fupstream%2Flz4.git Always Bump Offset by 64 KB in LZ4_loadDict() This actually ensures the guarantee referred to in the comment in LZ4_compress_fast_continue(). --- diff --git a/lib/lz4.c b/lib/lz4.c index 4b0efb1..0ce05da 100644 --- a/lib/lz4.c +++ b/lib/lz4.c @@ -1173,11 +1173,18 @@ int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize) LZ4_prepareTable(dict, 0, tableType); + /* We always increment the offset by 64 KB, since, if the dict is longer, + * we truncate it to the last 64k, and if it's shorter, we still want to + * advance by a whole window length so we can provide the guarantee that + * there are only valid offsets in the window, which allows an optimization + * in LZ4_compress_fast_continue() where it uses noDictIssue even when the + * dictionary isn't a full 64k. */ + if ((dictEnd - p) > 64 KB) p = dictEnd - 64 KB; - base = p - dict->currentOffset; + base = dictEnd - 64 KB - dict->currentOffset; dict->dictionary = p; dict->dictSize = (U32)(dictEnd - p); - dict->currentOffset += dict->dictSize; + dict->currentOffset += 64 KB; dict->tableType = tableType; if (dictSize < (int)HASH_UNIT) {