[PATCH 4/5] kernel32/tests: Add some HGLOBAL/HLOCAL limits tests.

Rémi Bernon rbernon at codeweavers.com
Mon Mar 28 04:00:15 CDT 2022


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/kernel32/tests/heap.c | 64 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/dlls/kernel32/tests/heap.c b/dlls/kernel32/tests/heap.c
index ec78324bcde..9921eaaf090 100644
--- a/dlls/kernel32/tests/heap.c
+++ b/dlls/kernel32/tests/heap.c
@@ -257,6 +257,7 @@ static void test_GlobalAlloc(void)
     static const SIZE_T buffer_size = ARRAY_SIZE(zero_buffer);
     const HGLOBAL invalid_mem = LongToHandle( 0xdeadbee0 + sizeof(void *) );
     void *const invalid_ptr = LongToHandle( 0xdeadbee0 );
+    HGLOBAL globals[0x10000];
     HGLOBAL mem, tmp_mem;
     BYTE *ptr, *tmp_ptr;
     UINT i, flags;
@@ -268,6 +269,37 @@ static void test_GlobalAlloc(void)
     mem = GlobalReAlloc( 0, 10, GMEM_MOVEABLE );
     ok( !mem, "GlobalReAlloc succeeded\n" );
 
+    for (i = 0; i < ARRAY_SIZE(globals); ++i)
+    {
+        mem = GlobalAlloc( GMEM_MOVEABLE | GMEM_DISCARDABLE, 0 );
+        ok( !!mem, "GlobalAlloc failed, error %lu\n", GetLastError() );
+        globals[i] = mem;
+    }
+
+    SetLastError( 0xdeadbeef );
+    mem = GlobalAlloc( GMEM_MOVEABLE | GMEM_DISCARDABLE, 0 );
+    todo_wine
+    ok( !mem, "GlobalAlloc succeeded\n" );
+    todo_wine
+    ok( GetLastError() == ERROR_NOT_ENOUGH_MEMORY, "got error %lu\n", GetLastError() );
+    SetLastError( 0xdeadbeef );
+    mem = LocalAlloc( LMEM_MOVEABLE | LMEM_DISCARDABLE, 0 );
+    todo_wine
+    ok( !mem, "LocalAlloc succeeded\n" );
+    todo_wine
+    ok( GetLastError() == ERROR_NOT_ENOUGH_MEMORY, "got error %lu\n", GetLastError() );
+
+    mem = GlobalAlloc( GMEM_DISCARDABLE, 0 );
+    ok( !!mem, "GlobalAlloc failed, error %lu\n", GetLastError() );
+    mem = GlobalFree( mem );
+    ok( !mem, "GlobalFree failed, error %lu\n", GetLastError() );
+
+    for (i = 0; i < ARRAY_SIZE(globals); ++i)
+    {
+        mem = GlobalFree( globals[i] );
+        ok( !mem, "GlobalFree failed, error %lu\n", GetLastError() );
+    }
+
     mem = GlobalAlloc( GMEM_MOVEABLE, 0 );
     ok( !!mem, "GlobalAlloc failed, error %lu\n", GetLastError() );
     mem = GlobalReAlloc( mem, 10, GMEM_MOVEABLE );
@@ -588,6 +620,7 @@ static void test_LocalAlloc(void)
     static const SIZE_T buffer_size = ARRAY_SIZE(zero_buffer);
     const HLOCAL invalid_mem = LongToHandle( 0xdeadbee0 + sizeof(void *) );
     void *const invalid_ptr = LongToHandle( 0xdeadbee0 );
+    HLOCAL locals[0x10000];
     HLOCAL mem, tmp_mem;
     BYTE *ptr, *tmp_ptr;
     UINT i, flags;
@@ -599,6 +632,37 @@ static void test_LocalAlloc(void)
     mem = LocalReAlloc( 0, 10, LMEM_MOVEABLE );
     ok( !mem, "LocalReAlloc succeeded\n" );
 
+    for (i = 0; i < ARRAY_SIZE(locals); ++i)
+    {
+        mem = LocalAlloc( LMEM_MOVEABLE | LMEM_DISCARDABLE, 0 );
+        ok( !!mem, "LocalAlloc failed, error %lu\n", GetLastError() );
+        locals[i] = mem;
+    }
+
+    SetLastError( 0xdeadbeef );
+    mem = LocalAlloc( LMEM_MOVEABLE | LMEM_DISCARDABLE, 0 );
+    todo_wine
+    ok( !mem, "LocalAlloc succeeded\n" );
+    todo_wine
+    ok( GetLastError() == ERROR_NOT_ENOUGH_MEMORY, "got error %lu\n", GetLastError() );
+    SetLastError( 0xdeadbeef );
+    mem = GlobalAlloc( GMEM_MOVEABLE | GMEM_DISCARDABLE, 0 );
+    todo_wine
+    ok( !mem, "GlobalAlloc succeeded\n" );
+    todo_wine
+    ok( GetLastError() == ERROR_NOT_ENOUGH_MEMORY, "got error %lu\n", GetLastError() );
+
+    mem = LocalAlloc( LMEM_DISCARDABLE, 0 );
+    ok( !!mem, "LocalAlloc failed, error %lu\n", GetLastError() );
+    mem = LocalFree( mem );
+    ok( !mem, "LocalFree failed, error %lu\n", GetLastError() );
+
+    for (i = 0; i < ARRAY_SIZE(locals); ++i)
+    {
+        mem = LocalFree( locals[i] );
+        ok( !mem, "LocalFree failed, error %lu\n", GetLastError() );
+    }
+
     mem = LocalAlloc( LMEM_MOVEABLE, 0 );
     ok( !!mem, "LocalAlloc failed, error %lu\n", GetLastError() );
     mem = LocalReAlloc( mem, 10, LMEM_MOVEABLE );
-- 
2.35.1




More information about the wine-devel mailing list