[PATCH 2/3] msacm32: Handle invalid source length in acmStreamPrepareHeader
Andrew Eikum
aeikum at codeweavers.com
Mon Aug 29 08:38:56 CDT 2016
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
On Sun, Aug 28, 2016 at 04:07:29AM -0300, Bruno Jesus wrote:
> Signed-off-by: Bruno Jesus <00cpxxx at gmail.com>
> ---
> dlls/msacm32/stream.c | 5 +++++
> dlls/msacm32/tests/msacm.c | 12 ++++++++----
> 2 files changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/dlls/msacm32/stream.c b/dlls/msacm32/stream.c
> index b380b46..4b4976f 100644
> --- a/dlls/msacm32/stream.c
> +++ b/dlls/msacm32/stream.c
> @@ -312,6 +312,11 @@ MMRESULT WINAPI acmStreamPrepareHeader(HACMSTREAM has, PACMSTREAMHEADER pash,
> WARN("invalid use of reserved parameter\n");
> return MMSYSERR_INVALFLAG;
> }
> + if (pash->cbSrcLength < was->drvInst.pwfxSrc->nBlockAlign) {
> + WARN("source smaller than block align (%d < %d)\n",
> + pash->cbSrcLength, was->drvInst.pwfxSrc->nBlockAlign);
> + return pash->cbSrcLength ? ACMERR_NOTPOSSIBLE : MMSYSERR_INVALPARAM;
> + }
>
> /* Note: the ACMSTREAMHEADER and ACMDRVSTREAMHEADER structs are of same
> * size. some fields are private to msacm internals, and are exposed
> diff --git a/dlls/msacm32/tests/msacm.c b/dlls/msacm32/tests/msacm.c
> index 06e530b..5ec4717 100644
> --- a/dlls/msacm32/tests/msacm.c
> +++ b/dlls/msacm32/tests/msacm.c
> @@ -591,14 +591,19 @@ static void test_prepareheader(void)
> hdr.cbDstLength = sizeof(pcm);
>
> mr = acmStreamPrepareHeader(has, &hdr, 0);
> -todo_wine
> ok(mr == MMSYSERR_INVALPARAM, "expected 0x0b, got 0x%x\n", mr);
>
> hdr.cbSrcLength = src->wfx.nBlockAlign - 1; /* less than block align */
> mr = acmStreamPrepareHeader(has, &hdr, 0);
> -todo_wine
> ok(mr == ACMERR_NOTPOSSIBLE, "expected 0x200, got 0x%x\n", mr);
>
> + hdr.cbSrcLength = src->wfx.nBlockAlign + 1; /* more than block align */
> + mr = acmStreamPrepareHeader(has, &hdr, 0);
> + ok(mr == MMSYSERR_NOERROR, "prepare failed: 0x%x\n", mr);
> +
> + mr = acmStreamUnprepareHeader(has, &hdr, 0);
> + ok(mr == MMSYSERR_NOERROR, "unprepare failed: 0x%x\n", mr);
> +
> hdr.cbSrcLength = src->wfx.nBlockAlign;
> mr = acmStreamPrepareHeader(has, &hdr, 1); /* invalid use of reserved parameter */
> ok(mr == MMSYSERR_INVALFLAG, "expected 0x0a, got 0x%x\n", mr);
> @@ -674,7 +679,6 @@ todo_wine
> hdr.pbDst = pcm;
> hdr.cbDstLength = -4;
> mr = acmStreamPrepareHeader(has, &hdr, 0);
> -todo_wine {
> ok(mr == ACMERR_NOTPOSSIBLE, "expected 0x200, got 0x%x\n", mr);
> ok(hdr.fdwStatus == 0, "expected 0, got 0x%x\n", hdr.fdwStatus);
>
> @@ -687,7 +691,7 @@ todo_wine {
>
> mr = acmStreamUnprepareHeader(has, &hdr, 0);
> ok(mr == ACMERR_UNPREPARED, "expected 0x202, got 0x%x\n", mr);
> -}
> +
> /* Less output space than required */
> memset(&hdr, 0, sizeof(hdr));
> hdr.cbStruct = sizeof(hdr);
> --
> 2.9.3
>
>
>
More information about the wine-patches
mailing list