kernel32/tests: Add invalid pointer heap validation tests.

Adding commented-out crashing tests to make it obvious that they were
tested and that HeapFree or HeapReAlloc don't validate pointers.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Rémi Bernon 2022-04-08 16:06:47 +02:00 committed by Alexandre Julliard
parent 8c931c7129
commit 93d5aba89c
1 changed files with 45 additions and 0 deletions

View File

@ -78,6 +78,7 @@ struct heap
static void test_HeapCreate(void)
{
static const BYTE buffer[512] = {0};
SIZE_T alloc_size = 0x8000 * sizeof(void *), size, i;
BYTE *ptr, *ptr1, *ptrs[128];
HANDLE heap, heap1;
@ -107,12 +108,49 @@ static void test_HeapCreate(void)
ret = HeapFree( heap, 0, NULL );
ok( ret, "HeapFree failed, error %lu\n", GetLastError() );
#if 0 /* crashes */
SetLastError( 0xdeadbeef );
ret = HeapFree( heap, 0, (void *)0xdeadbe00 );
ok( !ret, "HeapFree succeeded\n" );
ok( GetLastError() == ERROR_NOACCESS, "got error %lu\n", GetLastError() );
SetLastError( 0xdeadbeef );
ptr = (BYTE *)((UINT_PTR)buffer & ~63) + 64;
ret = HeapFree( heap, 0, ptr );
ok( !ret, "HeapFree succeeded\n" );
ok( GetLastError() == 0xdeadbeef, "got error %lu\n", GetLastError() );
#endif
SetLastError( 0xdeadbeef );
ptr = HeapReAlloc( heap, 0, NULL, 1 );
ok( !ptr, "HeapReAlloc succeeded\n" );
todo_wine
ok( GetLastError() == NO_ERROR, "got error %lu\n", GetLastError() );
#if 0 /* crashes */
SetLastError( 0xdeadbeef );
ptr1 = HeapReAlloc( heap, 0, (void *)0xdeadbe00, 1 );
ok( !ptr1, "HeapReAlloc succeeded\n" );
ok( GetLastError() == ERROR_NOACCESS, "got error %lu\n", GetLastError() );
SetLastError( 0xdeadbeef );
ptr = (BYTE *)((UINT_PTR)buffer & ~63) + 64;
ptr1 = HeapReAlloc( heap, 0, ptr, 1 );
ok( !ptr1, "HeapReAlloc succeeded\n" );
ok( GetLastError() == 0xdeadbeef, "got error %lu\n", GetLastError() );
#endif
SetLastError( 0xdeadbeef );
ret = HeapValidate( heap, 0, NULL );
ok( ret, "HeapValidate failed, error %lu\n", GetLastError() );
ok( GetLastError() == 0xdeadbeef, "got error %lu\n", GetLastError() );
SetLastError( 0xdeadbeef );
ret = HeapValidate( heap, 0, (void *)0xdeadbe00 );
ok( !ret, "HeapValidate succeeded\n" );
todo_wine
ok( GetLastError() == ERROR_NOACCESS, "got error %lu\n", GetLastError() );
SetLastError( 0xdeadbeef );
ptr = (BYTE *)((UINT_PTR)buffer & ~63) + 64;
ret = HeapValidate( heap, 0, ptr );
ok( !ret, "HeapValidate succeeded\n" );
ok( GetLastError() == 0xdeadbeef, "got error %lu\n", GetLastError() );
ptr = HeapAlloc( heap, 0, 0 );
ok( !!ptr, "HeapAlloc failed, error %lu\n", GetLastError() );
@ -122,8 +160,14 @@ static void test_HeapCreate(void)
ok( !ptr1, "HeapReAlloc succeeded\n" );
ptr1 = pHeapReAlloc( heap, 0, ptr, ~(SIZE_T)0 );
ok( !ptr1, "HeapReAlloc succeeded\n" );
ret = HeapValidate( heap, 0, ptr );
ok( ret, "HeapValidate failed, error %lu\n", GetLastError() );
ret = HeapFree( heap, 0, ptr );
ok( ret, "HeapFree failed, error %lu\n", GetLastError() );
SetLastError( 0xdeadbeef );
ret = HeapValidate( heap, 0, ptr );
ok( !ret, "HeapValidate succeeded\n" );
ok( GetLastError() == 0xdeadbeef, "got error %lu\n", GetLastError() );
ptr = pHeapAlloc( heap, 0, ~(SIZE_T)0 );
ok( !ptr, "HeapAlloc succeeded\n" );
@ -247,6 +291,7 @@ static void test_HeapCreate(void)
ptr1 = HeapReAlloc( heap, HEAP_REALLOC_IN_PLACE_ONLY, ptr, 2 * alloc_size );
todo_wine
ok( ptr1 != ptr, "HeapReAlloc HEAP_REALLOC_IN_PLACE_ONLY succeeded\n" );
todo_wine
ok( GetLastError() == ERROR_NOT_ENOUGH_MEMORY, "got error %lu\n", GetLastError() );
ret = HeapFree( heap, 0, ptr1 );