[NTDLL_APITEST] Add test for invalid pointer
[reactos.git] / rostests / apitests / ntdll / RtlAllocateHeap.c
index 5fb1885..829983c 100644 (file)
@@ -15,14 +15,15 @@ PVOID Buffers[0x100];
 START_TEST(RtlAllocateHeap)
 {
     USHORT i;
+    HANDLE hHeap;
     BOOLEAN Aligned = TRUE;
+    RTL_HEAP_PARAMETERS Parameters = {0};
 
     for (i = 0; i < 0x100; ++i)
     {
-        SetLastError(0xdeadbeef);
         Buffers[i] = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_CREATE_ALIGN_16, (i % 16 ) + 1);
         ASSERT(Buffers[i] != NULL);
-        if (!((ULONG_PTR)Buffers[i] & 0x2))
+        if (!((ULONG_PTR)Buffers[i] & 0xF))
         {
             Aligned = FALSE;
         }
@@ -33,5 +34,44 @@ START_TEST(RtlAllocateHeap)
         RtlFreeHeap(RtlGetProcessHeap(), 0, Buffers[i]);
     }
 
-    ok(Aligned  == FALSE, "No unaligned address returned\n");
+    ok(Aligned == FALSE, "No unaligned address returned\n");
+
+    Aligned = TRUE;
+    Parameters.Length = sizeof(Parameters);
+    hHeap = RtlCreateHeap(HEAP_CREATE_ALIGN_16, NULL, 0, 0, NULL, &Parameters);
+    if (hHeap == NULL)
+    {
+        return;
+    }
+
+    for (i = 0; i < 0x100; ++i)
+    {
+        Buffers[i] = RtlAllocateHeap(hHeap, 0, (i % 16 ) + 1);
+        ASSERT(Buffers[i] != NULL);
+        if (!((ULONG_PTR)Buffers[i] & 0xF))
+        {
+            Aligned = FALSE;
+        }
+    }
+
+    for (i = 0; i < 0x100; ++i)
+    {
+        RtlFreeHeap(hHeap, 0, Buffers[i]);
+    }
+
+    RtlDestroyHeap(hHeap);
+
+    ok(Aligned == TRUE, "Unaligned address returned\n");
+
+    _SEH2_TRY
+    {
+        hHeap = RtlCreateHeap(HEAP_CREATE_ALIGN_16, NULL, 0, 0, NULL, (PRTL_HEAP_PARAMETERS)0xdeadbeef);
+    }
+    _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+    {
+        hHeap = INVALID_HANDLE_VALUE;
+    }
+    _SEH2_END;
+
+    ok(hHeap == NULL, "Unexpected heap value: %p\n", hHeap);
 }