[PATCH v2 2/2] kernelbase/tests: Add test for GetSystemFirmwareTable regression

Zhiyi Zhang zzhang at codeweavers.com
Wed Nov 20 01:26:48 CST 2019



On 11/20/19 3:07 PM, John Chadwick wrote:
> This adds a test to ensure that a typical usage of
> GetSystemFirmwareTable with a preflight call works correctly.
>
> Signed-off-by: John Chadwick <john at jchw.io>
> ---
>  dlls/kernelbase/tests/Makefile.in |  1 +
>  dlls/kernelbase/tests/memory.c    | 62 +++++++++++++++++++++++++++++++
>  2 files changed, 63 insertions(+)
>  create mode 100644 dlls/kernelbase/tests/memory.c
>
> diff --git a/dlls/kernelbase/tests/Makefile.in b/dlls/kernelbase/tests/Makefile.in
> index 22e4a17a58..f269147733 100644
> --- a/dlls/kernelbase/tests/Makefile.in
> +++ b/dlls/kernelbase/tests/Makefile.in
> @@ -1,5 +1,6 @@
>  TESTDLL   = kernelbase.dll
>  
>  C_SRCS = \
> +	memory.c \
>  	path.c \
>  	sync.c
> diff --git a/dlls/kernelbase/tests/memory.c b/dlls/kernelbase/tests/memory.c
> new file mode 100644
> index 0000000000..f68077678a
> --- /dev/null
> +++ b/dlls/kernelbase/tests/memory.c
> @@ -0,0 +1,62 @@
> +/*
> + * Memory tests for kernelbase.dll
> + *
> + * Copyright 2019 John Chadwick
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
> + */
> +
> +#include <stdarg.h>
> +#include <windef.h>
> +#include <winbase.h>
> +#include <stdlib.h>
> +#include <winerror.h>
> +
> +#include "wine/test.h"
> +
> +#define RSMB 0x52534D42
> +
> +static UINT (WINAPI *pGetSystemFirmwareTable)(DWORD, DWORD, void *, DWORD);
> +
> +static void test_GetSystemFirmwareTable(void)
> +{
> +    DWORD size, bytes_returned;
> +    void *data;
> +
> +    if (!pGetSystemFirmwareTable)
> +    {
> +        win_skip("GetSystemFirmwareTable not available\n");
> +        return;
> +    }
> +
> +    size = pGetSystemFirmwareTable(RSMB, 0, NULL, 0);
> +    ok(size > 0, "got %d", size);
> +
> +    data = HeapAlloc(GetProcessHeap(), 0, size);
> +    ok(data != NULL, "alloc failed");
Hi John,

kernel32/tests/version.c already has test_GetSystemFirmwareTable().
So I think you should add the tests there. And it would be better to add the tests
first to demonstrate the breakage (adding a todo_wine) and a fix after that to remove
todo_wine.

Also data is leaked.

Thanks,
Zhiyi
> +
> +    bytes_returned = pGetSystemFirmwareTable(RSMB, 0, data, size);
> +    ok(bytes_returned == size, "expect %d, got %d\n", size, bytes_returned);
> +}
> +
> +START_TEST(memory)
> +{
> +    HMODULE hmod;
> +
> +    hmod = LoadLibraryA("kernelbase.dll");
> +    pGetSystemFirmwareTable = (void *)GetProcAddress(hmod, "GetSystemFirmwareTable");
> +
> +    test_GetSystemFirmwareTable();
> +}




More information about the wine-devel mailing list