[PATCH] winmm: return error in waveOutMessage if either dwParam1 or dwParam2 is null

Andrew Eikum aeikum at codeweavers.com
Tue Apr 24 07:44:18 CDT 2018


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

On Tue, Apr 24, 2018 at 11:52:18AM +0200, Louis Lenders wrote:
> This is for bug https://bugs.winehq.org/show_bug.cgi?id=44953
> (The first test shows what Premiere passes in to waveOutMessage)
> After this it runs into same issue with waveInMessage, i`ll send a seperate patch for that issue
> 
> Signed-off-by: Louis Lenders <xerox.xerox2000x at gmail.com>
> ---
>  dlls/winmm/tests/wave.c | 10 ++++++++++
>  dlls/winmm/waveform.c   | 20 ++++++++++----------
>  2 files changed, 20 insertions(+), 10 deletions(-)
> 
> diff --git a/dlls/winmm/tests/wave.c b/dlls/winmm/tests/wave.c
> index 2a12752..8d7dfd6 100644
> --- a/dlls/winmm/tests/wave.c
> +++ b/dlls/winmm/tests/wave.c
> @@ -1440,6 +1440,16 @@ static void wave_out_tests(void)
>          ok((ndev == 0 && (preferred == -1 || broken(preferred != -1))) ||
>                  preferred < ndev, "Got invalid preferred device: 0x%x\n", preferred);
>  
> +    rc = waveOutMessage((HWAVEOUT)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET,
> +         (DWORD_PTR)-1  , 0);
> +    ok(rc == MMSYSERR_INVALPARAM || rc == MMSYSERR_BADDEVICEID, /* w2008+wvista */
> +       "waveOutMessage(DRVM_MAPPER_PREFERRED_GET) failed: %u\n", rc);
> +
> +    rc = waveOutMessage((HWAVEOUT)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET,
> +         0, (DWORD_PTR)&status);
> +    ok(rc == MMSYSERR_INVALPARAM || rc == MMSYSERR_BADDEVICEID, /* w2008+wvista */
> +       "waveOutMessage(DRVM_MAPPER_PREFERRED_GET) failed: %u\n", rc);
> +
>      rc=waveOutGetDevCapsA(ndev+1,&capsA,sizeof(capsA));
>      ok(rc==MMSYSERR_BADDEVICEID,
>         "waveOutGetDevCapsA(%s): MMSYSERR_BADDEVICEID expected, got %s\n",
> diff --git a/dlls/winmm/waveform.c b/dlls/winmm/waveform.c
> index 7308519..26fed17 100644
> --- a/dlls/winmm/waveform.c
> +++ b/dlls/winmm/waveform.c
> @@ -3262,17 +3262,17 @@ UINT WINAPI waveOutMessage(HWAVEOUT hWaveOut, UINT uMessage,
>      case DRV_QUERYMAPPABLE:
>          return MMSYSERR_NOERROR;
>      case DRVM_MAPPER_PREFERRED_GET:
> -        if(dwParam1) {
> -            if(g_outmmdevices_count > 0)
> -                /* Device 0 is always the default device */
> -                *(DWORD *)dwParam1 = 0;
> -            else
> -                *(DWORD *)dwParam1 = -1;
> -        }
> +        if(!dwParam1 || !dwParam2)
> +            return MMSYSERR_INVALPARAM;
>  
> -        if(dwParam2)
> -            /* Status flags */
> -            *(DWORD *)dwParam2 = 0;
> +        if(g_outmmdevices_count > 0)
> +            /* Device 0 is always the default device */
> +            *(DWORD *)dwParam1 = 0;
> +        else
> +            *(DWORD *)dwParam1 = -1;
> +
> +        /* Status flags */
> +        *(DWORD *)dwParam2 = 0;
>  
>          return MMSYSERR_NOERROR;
>      }
> -- 
> 2.7.4
> 
> 
> 



More information about the wine-devel mailing list