diff --git a/codec/decoder/core/inc/error_code.h b/codec/decoder/core/inc/error_code.h index d43ac30c..ebf46f7e 100644 --- a/codec/decoder/core/inc/error_code.h +++ b/codec/decoder/core/inc/error_code.h @@ -133,6 +133,7 @@ enum { ERR_INFO_INVALID_CBP, ERR_INFO_DQUANT_OUT_OF_RANGE, ERR_INFO_CAVLC_INVALID_PREFIX, + ERR_INFO_CAVLC_INVALID_LEVEL, ERR_INFO_CAVLC_INVALID_TOTAL_COEFF_OR_TRAILING_ONES, ERR_INFO_CAVLC_INVALID_ZERO_LEFT, ERR_INFO_CAVLC_INVALID_RUN_BEFORE, diff --git a/codec/decoder/core/src/parse_mb_syn_cavlc.cpp b/codec/decoder/core/src/parse_mb_syn_cavlc.cpp index 35d4f47c..80782ad4 100644 --- a/codec/decoder/core/src/parse_mb_syn_cavlc.cpp +++ b/codec/decoder/core/src/parse_mb_syn_cavlc.cpp @@ -718,8 +718,10 @@ int32_t WelsResidualBlockCavlc (SVlcTable* pVlcTable, uint8_t* pNonZeroCountCach if ((uiTrailingOnes > 3) || (uiTotalCoeff > 16)) { /////////////////check uiTrailingOnes and uiTotalCoeff return ERR_INFO_CAVLC_INVALID_TOTAL_COEFF_OR_TRAILING_ONES; } - iUsedBits += CavlcGetLevelVal (iLevel, &sReadBitsCache, uiTotalCoeff, uiTrailingOnes); - + if ((i = CavlcGetLevelVal (iLevel, &sReadBitsCache, uiTotalCoeff, uiTrailingOnes)) == -1) { + return ERR_INFO_CAVLC_INVALID_LEVEL; + } + iUsedBits += i; if (uiTotalCoeff < iMaxNumCoeff) { iUsedBits += CavlcGetTotalZeros (iZerosLeft, &sReadBitsCache, uiTotalCoeff, pVlcTable, bChromaDc); } else {