Brandon Moore : msadpm: Stop decoding instead of crashing for invalid adpcm data.
Module: wine Branch: stable Commit: a393c4bd2ed1a4c57fa38ad26622395f01eeadf8 URL: https://gitlab.winehq.org/wine/wine/-/commit/a393c4bd2ed1a4c57fa38ad26622395... Author: Brandon Moore <moore.3071(a)osu.edu> Date: Fri Apr 29 16:50:55 2022 -0700 msadpm: Stop decoding instead of crashing for invalid adpcm data. Apply the same patch from 72528be84fdc for adpcm data sent to mono destinations in addition to stereo destinations. Signed-off-by: Brandon Moore <moore.3071(a)osu.edu> Signed-off-by: Andrew Eikum <aeikum(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 63f9a08240a076c1382fc8298a7236a0d7134a78) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/msadp32.acm/msadp32.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dlls/msadp32.acm/msadp32.c b/dlls/msadp32.acm/msadp32.c index 8b83f69c006..ddd31d16882 100644 --- a/dlls/msadp32.acm/msadp32.c +++ b/dlls/msadp32.acm/msadp32.c @@ -319,7 +319,14 @@ static void cvtMMms16K(const ACMDRVSTREAMINSTANCE *adsi, { const unsigned char* in_src = src; - assert(*src <= 6); + /* Catch a problem from Lord of the Rings War of the Ring where it + * passes invalid data. */ + if (*src > 6) + { + *ndst -= nblock * nsamp_blk * adsi->pwfxDst->nBlockAlign; + WARN("Invalid ADPCM data, stopping conversion\n"); + break; + } coeff = MSADPCM_CoeffSet[*src++]; idelta = R16(src); src += 2;
participants (1)
-
Alexandre Julliard