Fix Dict Size Test in `LZ4_compress_fast_continue()`
authorW. Felix Handte <w@felixhandte.com>
Wed, 5 Dec 2018 19:24:33 +0000 (11:24 -0800)
committerW. Felix Handte <w@felixhandte.com>
Wed, 5 Dec 2018 19:24:33 +0000 (11:24 -0800)
Dictionaries don't need to be > 4 bytes, they need to be >= 4 bytes. This test
was overly conservative.

Also removes the test in `LZ4_attach_dictionary()`.

lib/lz4.c

index 87cbb99..53eff2e 100644 (file)
--- a/lib/lz4.c
+++ b/lib/lz4.c
@@ -1271,9 +1271,7 @@ void LZ4_attach_dictionary(LZ4_stream_t *working_stream, const LZ4_stream_t *dic
      */
     LZ4_resetStream_fast(working_stream);
 
-    if (dictionary_stream != NULL
-     && dictionary_stream->internal_donotuse.dictSize - 1 >= 4
-        /* intentional underflow */) {
+    if (dictionary_stream != 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
@@ -1321,7 +1319,7 @@ int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, const char* source, ch
     if (acceleration < 1) acceleration = ACCELERATION_DEFAULT;
 
     /* invalidate tiny dictionaries */
-    if ( (streamPtr->dictSize-1 < 4)   /* intentional underflow */
+    if ( (streamPtr->dictSize-1 < 4-1)   /* intentional underflow */
       && (dictEnd != (const BYTE*)source) ) {
         DEBUGLOG(5, "LZ4_compress_fast_continue: dictSize(%u) at addr:%p is too small", streamPtr->dictSize, streamPtr->dictionary);
         streamPtr->dictSize = 0;