lib/LzmaEnc: Validate "len" before subtracting
In LzmaEnc_CodeOneBlock(), both GetOptimumFast() and GetOptimum() returns a value of greater or equal to 1, which is assigned to "len". But since LZMA_MATCH_LEN_MIN == 2, "len" should be validated before performing "len - LZMA_MATCH_LEN_MIN" to avoid underflow when "len" equals to 1. Fixes: CID 51508 Signed-off-by: Lidong Chen <lidong.chen@oracle.com> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com> Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
This commit is contained in:
parent
86e8f2c4b0
commit
40e261b89b
@ -1880,6 +1880,11 @@ static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, Bool useLimits, UInt32 maxPackSize
|
||||
UInt32 posSlot, lenToPosState;
|
||||
RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 0);
|
||||
p->state = kMatchNextStates[p->state];
|
||||
if (len < LZMA_MATCH_LEN_MIN)
|
||||
{
|
||||
p->result = SZ_ERROR_DATA;
|
||||
return CheckErrors(p);
|
||||
}
|
||||
LenEnc_Encode2(&p->lenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices);
|
||||
pos -= LZMA_NUM_REPS;
|
||||
GetPosSlot(pos, posSlot);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user