Commit 72528be8 authored by Bruno Jesus's avatar Bruno Jesus Committed by Alexandre Julliard

msadpcm32.acm: Stop converting data instead of crashing.

parent 972a74dd
......@@ -249,9 +249,17 @@ static void cvtSSms16K(const ACMDRVSTREAMINSTANCE *adsi,
{
const unsigned char* in_src = src;
assert(*src <= 6);
/* Catch a problem from Tomb Raider III (bug 21000) where it passes
* invalid data after a valid sequence of blocks */
if (*src > 6 || *(src + 1) > 6)
{
/* Recalculate the amount of used output buffer. We are not changing
* nsrc, let's assume the bad data was parsed */
*ndst -= nblock * nsamp_blk * adsi->pwfxDst->nBlockAlign;
WARN("Invalid ADPCM data, stopping conversion\n");
break;
}
coeffL = MSADPCM_CoeffSet[*src++];
assert(*src <= 6);
coeffR = MSADPCM_CoeffSet[*src++];
ideltaL = R16(src); src += 2;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment