]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Fix corner cases exposed by zstreamtest
authorNick Terrell <terrelln@fb.com>
Tue, 20 Mar 2018 00:54:04 +0000 (17:54 -0700)
committerNick Terrell <terrelln@fb.com>
Tue, 20 Mar 2018 00:54:04 +0000 (17:54 -0700)
lib/compress/zstdmt_compress.c

index 3225f98297084996492d818cc4d235f3c37aa80a..9d54da0d8d2a83c2988790e0bf3f9a92ba8711c4 100644 (file)
@@ -456,11 +456,11 @@ static int ZSTDMT_serialState_reset(serialState_t* serialState, ZSTDMT_seqPool*
         ZSTD_window_clear(&serialState->ldmState.window);
         serialState->ldmWindow = serialState->ldmState.window;
         /* Resize tables and output space if necessary. */
-        if (serialState->params.ldmParams.hashLog < hashLog) {
+        if (serialState->ldmState.hashTable == NULL || serialState->params.ldmParams.hashLog < hashLog) {
             ZSTD_free(serialState->ldmState.hashTable, cMem);
             serialState->ldmState.hashTable = (ldmEntry_t*)ZSTD_malloc(hashSize, cMem);
         }
-        if (prevBucketLog < bucketLog) {
+        if (serialState->ldmState.bucketOffsets == NULL || prevBucketLog < bucketLog) {
             ZSTD_free(serialState->ldmState.bucketOffsets, cMem);
             serialState->ldmState.bucketOffsets = (BYTE*)ZSTD_malloc(bucketSize, cMem);
         }
@@ -1591,6 +1591,9 @@ static int ZSTDMT_isOverlapped(buffer_t buffer, range_t range)
 
     if (rangeStart == NULL || bufferStart == NULL)
         return 0;
+    /* Empty ranges cannot overlap */
+    if (bufferStart == bufferEnd || rangeStart == rangeEnd)
+        return 0;
 
     return bufferStart < rangeEnd && rangeStart < bufferEnd;
 }