msacm32/tests: Add more acmStreamPrepareHeader tests

Andrew Eikum aeikum at codeweavers.com
Mon Nov 30 10:45:05 CST 2015


Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>

Makes sense to me. One more thing to test would be whether msacm
expects cbSrcLength to be a multiple of nBlockAlign, or simply more
than nBlockAlign. That is, try also testing:

  cbSrcLength = nBlockAlign + 1

Andrew

On Fri, Nov 27, 2015 at 09:10:04PM +0800, Bruno Jesus wrote:
> Now I understand the problem of
> https://bugs.winehq.org/show_bug.cgi?id=24723 (Lost Horizon game
> crashing during audio play)
> It tries to prepare a buffer with less than block align size, this
> gives error in Windows but works in wine and then the game tries to
> convert data an crashes.
> 
> Also wine64 fails in one test so I added a todo and changed the test
> print to hex like the rest of the tests.
> 
> Signed-off-by: Bruno Jesus <00cpxxx at gmail.com>

> diff --git a/dlls/msacm32/tests/msacm.c b/dlls/msacm32/tests/msacm.c
> index bb4ccc5..812a1bb 100644
> --- a/dlls/msacm32/tests/msacm.c
> +++ b/dlls/msacm32/tests/msacm.c
> @@ -586,6 +586,33 @@ static void test_prepareheader(void)
>      memset(&hdr, 0, sizeof(hdr));
>      hdr.cbStruct = sizeof(hdr);
>      hdr.pbSrc = input;
> +    hdr.cbSrcLength = 0; /* invalid source length */
> +    hdr.pbDst = pcm;
> +    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;
> +    mr = acmStreamPrepareHeader(has, &hdr, 1); /* invalid use of reserved parameter */
> +todo_wine
> +    ok(mr == MMSYSERR_INVALFLAG, "expected 0x0a, got 0x%x\n", mr);
> +
> +    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);
> +
> +    memset(&hdr, 0, sizeof(hdr));
> +    hdr.cbStruct = sizeof(hdr);
> +    hdr.pbSrc = input;
>      hdr.cbSrcLength = sizeof(input);
>      hdr.pbDst = pcm;
>      hdr.cbDstLength = sizeof(pcm);
> @@ -638,7 +665,8 @@ todo_wine
>          ok(hdr.fdwStatus == ACMSTREAMHEADER_STATUSF_DONE, "header wasn't unprepared: 0x%x\n", hdr.fdwStatus);
>      }
>      else
> -        ok(mr == MMSYSERR_INVALPARAM, "expected 11, got %d\n", mr);
> +todo_wine
> +        ok(mr == MMSYSERR_INVALPARAM, "expected 0x0b, got 0x%x\n", mr);
>  
>      memset(&hdr, 0, sizeof(hdr));
>      hdr.cbStruct = sizeof(hdr);

> 




More information about the wine-patches mailing list