From aedc44780468c11d90114bc1d6124af545bfc652 Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Tue, 17 Apr 2018 14:01:44 -0400 Subject: Always Bump Offset by 64 KB in LZ4_loadDict() This actually ensures the guarantee referred to in the comment in LZ4_compress_fast_continue(). --- lib/lz4.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'lib/lz4.c') diff --git a/lib/lz4.c b/lib/lz4.c index 4b0efb14..0ce05dae 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) { -- cgit v1.2.3