From 321ec73af789e7ed6d0ce2f9e79501d79db5e267 Mon Sep 17 00:00:00 2001 From: Liming Gao Date: Fri, 14 Apr 2017 00:13:06 +0800 Subject: MdeModulePkg BrotliLib: Fix the regression logic issue in loop In V2, change logic to avoid use mtf[-1] style to get value. Roll back to previous logic, and use point + offset to get byte value. Cc: Bell Song Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Liming Gao Reviewed-by: Bell Song (cherry picked from commit 2c8d2545f59bf00f0b2460dbeabee6645d130d3e) --- MdeModulePkg/Library/BrotliCustomDecompressLib/dec/decode.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/decode.c b/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/decode.c index 67f0ff2cd9..6557ba67d5 100644 --- a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/decode.c +++ b/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/decode.c @@ -855,6 +855,7 @@ static BROTLI_NOINLINE void InverseMoveToFrontTransform( uint32_t i = 4; uint32_t upper_bound = state->mtf_upper_bound; uint8_t* mtf = &state->mtf[4]; /* Make mtf[-1] addressable. */ + uint8_t* mtft = &state->mtf[3]; /* Load endian-aware constant. */ const uint8_t b0123[4] = {0, 1, 2, 3}; uint32_t pattern; @@ -875,10 +876,10 @@ static BROTLI_NOINLINE void InverseMoveToFrontTransform( uint8_t value = mtf[index]; upper_bound |= (uint32_t)v[i]; v[i] = value; - mtf[-1] = value; - while (index > 0) { + mtft[0] = value; + while (index >= 0) { + mtft[index + 1] = mtft[index]; index--; - mtf[index + 1] = mtf[index]; } } /* Remember amount of elements to be reinitialized. */ -- cgit v1.2.3