[PATCH] rasapi32: Ensure device count matches data returned

Sebastian Lackner sebastian at fds-team.de
Sun Feb 26 14:11:10 CST 2017


On 26.02.2017 20:41, Bruno Jesus wrote:
> From: Bruno Jesus <bjesus at codeweavers.com>
> 
> Based on original patch by Qian Hong.
> 
> Fixes bug https://bugs.winehq.org/show_bug.cgi?id=30378
> 
> Signed-off-by: Bruno Jesus <bjesus at codeweavers.com>
> ---
>  dlls/rasapi32/rasapi.c       |  1 +
>  dlls/rasapi32/tests/rasapi.c | 24 ++++++++++++++++++++++++
>  2 files changed, 25 insertions(+)
> 
> diff --git a/dlls/rasapi32/rasapi.c b/dlls/rasapi32/rasapi.c
> index fcd0cb8..f97d4c1 100644
> --- a/dlls/rasapi32/rasapi.c
> +++ b/dlls/rasapi32/rasapi.c
> @@ -254,6 +254,7 @@ DWORD WINAPI RasEnumDevicesA(LPRASDEVINFOA lpRasDevinfo, LPDWORD lpcb, LPDWORD l
>  	if(lpRasDevinfo && lpRasDevinfo->dwSize != sizeof(RASDEVINFOA))
>  		return ERROR_INVALID_SIZE;
>  
> +	*lpcDevices = 1;
>  	if (!lpRasDevinfo || (*lpcb < sizeof(RASDEVINFOA))) {
>  		*lpcb = sizeof(RASDEVINFOA);
>  		return ERROR_BUFFER_TOO_SMALL;
> diff --git a/dlls/rasapi32/tests/rasapi.c b/dlls/rasapi32/tests/rasapi.c
> index e0ff25f..e982f6c 100644
> --- a/dlls/rasapi32/tests/rasapi.c
> +++ b/dlls/rasapi32/tests/rasapi.c
> @@ -77,80 +77,104 @@ static void test_rasenum(void)
>  
>      /* test first parameter */
>      cb = bufsize;
> +    cDevices = 0xdead;
>      result = pRasEnumDevicesA(NULL, &cb, &cDevices);
>      ok(result == ERROR_BUFFER_TOO_SMALL ||
>      result == ERROR_INVALID_USER_BUFFER, /* win98 */
>      "Expected ERROR_BUFFER_TOO_SMALL, got %08d\n", result);
> +    ok(cDevices > 0 && cDevices != 0xdead, "Unexpected device count %d\n", cDevices);
>  
>      rasDevInfo[0].dwSize = 0;
>      cb = bufsize;
> +    cDevices = 0xdead;
>      result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices);
>      ok(result == ERROR_INVALID_SIZE ||
>      result == ERROR_INVALID_USER_BUFFER, /* win98 */
>      "Expected ERROR_INVALID_SIZE, got %08d\n", result);
> +    ok(cDevices == 0xdead, "Unexpected device count %d\n", cDevices);
>  
>      rasDevInfo[0].dwSize = sizeof(RASDEVINFOA) -1;
>      cb = bufsize;
> +    cDevices = 0xdead;
>      result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices);
>      ok(result == ERROR_INVALID_SIZE ||
>      result == ERROR_INVALID_USER_BUFFER, /* win98 */
>      "Expected ERROR_INVALID_SIZE, got %08d\n", result);
> +    ok(cDevices == 0xdead, "Unexpected device count %d\n", cDevices);
>  
>      rasDevInfo[0].dwSize = sizeof(RASDEVINFOA) +1;
>      cb = bufsize;
> +    cDevices = 0xdead;
>      result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices);
>      ok(result == ERROR_INVALID_SIZE ||
>      result == ERROR_INVALID_USER_BUFFER, /* win98 */
>      "Expected ERROR_INVALID_SIZE, got %08d\n", result);
> +    ok(cDevices == 0xdead, "Unexpected device count %d\n", cDevices);
>  
>      /* test second parameter */
>      rasDevInfo[0].dwSize = sizeof(RASDEVINFOA);
>      result = pRasEnumDevicesA(rasDevInfo, NULL, &cDevices);
> +    cDevices = 0xdead;

Whats the point to set this after the function call? And also, how is this
better than Qian Hongs original patch? Using %u is more correct for unsigned
values, and the empty line after the assignment of *lpcDevices also didn't
hurt.

>      ok(result == ERROR_INVALID_PARAMETER,
>      "Expected ERROR_INVALID_PARAMETER, got %08d\n", result);
> +    ok(cDevices == 0xdead, "Unexpected device count %d\n", cDevices);
>  
>      rasDevInfo[0].dwSize = sizeof(RASDEVINFOA);
>      cb = 0;
>      result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices);
> +    cDevices = 0xdead;
>      ok(result == ERROR_BUFFER_TOO_SMALL ||
>      result == ERROR_INVALID_SIZE, /* vista, 2k8 */
>      "Expected ERROR_BUFFER_TOO_SMALL/ERROR_INVALID_SIZE, got %08d\n", result);
> +    ok(cDevices == 0xdead, "Unexpected device count %d\n", cDevices);
>  
>      rasDevInfo[0].dwSize = sizeof(RASDEVINFOA);
>      cb = bufsize -1;
>      result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices);
> +    cDevices = 0xdead;
>      ok(result == ERROR_BUFFER_TOO_SMALL,
>      "Expected ERROR_BUFFER_TOO_SMALL, got %08d\n", result);
> +    ok(cDevices == 0xdead, "Unexpected device count %d\n", cDevices);
>  
>      rasDevInfo[0].dwSize = sizeof(RASDEVINFOA);
>      cb = bufsize +1;
> +    cDevices = 0xdead;
>      result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices);
>      ok(result == ERROR_SUCCESS,
>      "Expected ERROR_SUCCESS, got %08d\n", result);
> +    ok(cDevices > 0 && cDevices != 0xdead, "Unexpected device count %d\n", cDevices);
>  
>      /* test third parameter */
>      rasDevInfo[0].dwSize = sizeof(RASDEVINFOA);
>      cb = bufsize;
> +    cDevices = 0xdead;
>      result = pRasEnumDevicesA(rasDevInfo, &cb, NULL);
>      ok(result == ERROR_INVALID_PARAMETER,
>      "Expected ERROR_INVALID_PARAMETER, got %08d\n", result);
> +    ok(cDevices == 0xdead, "Unexpected device count %d\n", cDevices);
>  
>      /* test combinations of invalid parameters */
> +    cDevices = 0xdead;
>      result = pRasEnumDevicesA(NULL, NULL, &cDevices);
>      ok(result == ERROR_INVALID_PARAMETER,
>      "Expected ERROR_INVALID_PARAMETER, got %08d\n", result);
> +    ok(cDevices == 0xdead, "Unexpected device count %d\n", cDevices);
>  
> +    cDevices = 0xdead;
>      result = pRasEnumDevicesA(NULL, &cb, NULL);
>      ok(result == ERROR_INVALID_PARAMETER ||
>      result == ERROR_INVALID_USER_BUFFER, /* win98 */
>      "Expected ERROR_INVALID_PARAMETER, got %08d\n", result);
> +    ok(cDevices == 0xdead, "Unexpected device count %d\n", cDevices);
>  
>      cb = 0;
>      rasDevInfo[0].dwSize = 0;
> +    cDevices = 0xdead;
>      result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices);
>      ok(result == ERROR_INVALID_SIZE ||
>      broken(result == ERROR_BUFFER_TOO_SMALL), /* win98 */
>      "Expected ERROR_INVALID_SIZE, got %08d\n", result);
> +    ok(cDevices == 0xdead, "Unexpected device count %d\n", cDevices);
>  
>      HeapFree(GetProcessHeap(), 0, rasDevInfo);
>  }
> -- 2.9.3
> 




More information about the wine-devel mailing list