From: senhuang42 Date: Wed, 14 Oct 2020 19:23:03 +0000 (-0400) Subject: Adjust match backwards count args X-Git-Tag: v1.4.7~52^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3f99c9b38dce592c8336187c7e2e1339a3c428ae;p=thirdparty%2Fzstd.git Adjust match backwards count args --- diff --git a/lib/compress/zstd_ldm.c b/lib/compress/zstd_ldm.c index d45adc045..9a6ea108b 100644 --- a/lib/compress/zstd_ldm.c +++ b/lib/compress/zstd_ldm.c @@ -161,17 +161,15 @@ static size_t ZSTD_ldm_countBackwardsMatch( * On reaching `pMatchBase`, start counting from mEnd */ static size_t ZSTD_ldm_countBackwardsMatch_2segments( const BYTE* pIn, const BYTE* pAnchor, - const BYTE* pMatch, const BYTE* pMatchBase, const BYTE* mEnd) + const BYTE* pMatch, const BYTE* pMatchBase, const BYTE* dictStart, const BYTE* mEnd) { - const BYTE* const vBegin = MAX(pIn - (pMatch - pMatchBase), pAnchor); - size_t const matchLength = ZSTD_ldm_countBackwardsMatch(pIn, vBegin, pMatch, pMatchBase); - if (pMatch - matchLength != pMatchBase) { + size_t const matchLength = ZSTD_ldm_countBackwardsMatch(pIn, pAnchor, pMatch, pMatchBase); + if (pMatch - matchLength != pMatchBase || pMatchBase == dictStart) { return matchLength; } DEBUGLOG(7, "ZSTD_ldm_countBackwardsMatch_2segments: found a 2-parts backwards match (current length==%zu)", matchLength); - DEBUGLOG(7, "distance from pMatch to start = %zi", pMatch - pMatchBase); DEBUGLOG(7, "final backwards match length = %zu", matchLength + ZSTD_ldm_countBackwardsMatch(pIn - matchLength, pAnchor, mEnd, pMatchBase)); - return matchLength + ZSTD_ldm_countBackwardsMatch(pIn - matchLength, pAnchor, mEnd, pMatchBase); + return matchLength + ZSTD_ldm_countBackwardsMatch(pIn - matchLength, pAnchor, mEnd, dictStart); } /** ZSTD_ldm_fillFastTables() : @@ -350,7 +348,7 @@ static size_t ZSTD_ldm_generateSequences_internal( } curBackwardMatchLength = ZSTD_ldm_countBackwardsMatch_2segments(ip, anchor, pMatch, - lowMatchPtr, dictEnd); + lowMatchPtr, dictStart, dictEnd); curTotalMatchLength = curForwardMatchLength + curBackwardMatchLength; } else { /* !extDict */