mirror of
https://github.com/reactos/reactos.git
synced 2025-01-01 03:54:02 +00:00
[NTDLL_APITEST]
- Add a test for RtlReAllocateHeap -- shows that it doesn't handle allocations larger than 0x7f000 correctly in ROS CORE-9441 svn path=/trunk/; revision=66958
This commit is contained in:
parent
106df10e94
commit
c7d57b853b
3 changed files with 81 additions and 0 deletions
|
@ -27,6 +27,7 @@ list(APPEND SOURCE
|
|||
RtlGetLongestNtPathLength.c
|
||||
RtlInitializeBitMap.c
|
||||
RtlMemoryStream.c
|
||||
RtlReAllocateHeap.c
|
||||
StackOverflow.c
|
||||
SystemInfo.c
|
||||
Timer.c
|
||||
|
|
78
rostests/apitests/ntdll/RtlReAllocateHeap.c
Normal file
78
rostests/apitests/ntdll/RtlReAllocateHeap.c
Normal file
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* PROJECT: ReactOS api tests
|
||||
* LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
|
||||
* PURPOSE: Test for RtlReAllocateHeap
|
||||
* PROGRAMMERS: Thomas Faber <thomas.faber@reactos.org>
|
||||
*/
|
||||
|
||||
#include <apitest.h>
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#include <ndk/rtlfuncs.h>
|
||||
|
||||
static
|
||||
BOOLEAN
|
||||
CheckBuffer(
|
||||
PVOID Buffer,
|
||||
SIZE_T Size,
|
||||
UCHAR Value)
|
||||
{
|
||||
PUCHAR Array = Buffer;
|
||||
SIZE_T i;
|
||||
|
||||
for (i = 0; i < Size; i++)
|
||||
if (Array[i] != Value)
|
||||
{
|
||||
trace("Expected %x, found %x at offset %lu\n", Value, Array[i], (ULONG)i);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
START_TEST(RtlReAllocateHeap)
|
||||
{
|
||||
PUCHAR Buffer = NULL;
|
||||
PUCHAR NewBuffer;
|
||||
SIZE_T OldSize = 0;
|
||||
SIZE_T Size;
|
||||
|
||||
OldSize = 0x100;
|
||||
Buffer = RtlReAllocateHeap(RtlGetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
NULL,
|
||||
OldSize);
|
||||
ok(Buffer == NULL, "RtlReAllocateHeap succeeded for NULL\n");
|
||||
if (Buffer)
|
||||
RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer);
|
||||
|
||||
Buffer = RtlAllocateHeap(RtlGetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
OldSize);
|
||||
if (!Buffer)
|
||||
{
|
||||
skip("RtlAllocateHeap failed for size %lu\n", OldSize);
|
||||
return;
|
||||
}
|
||||
ok(CheckBuffer(Buffer, OldSize, 0), "HEAP_ZERO_MEMORY not respected for 0x%lx\n", OldSize);
|
||||
|
||||
for (Size = 0x78000; Size < 0x90000; Size += 0x100)
|
||||
{
|
||||
RtlFillMemory(Buffer, OldSize, 0x7a);
|
||||
NewBuffer = RtlReAllocateHeap(RtlGetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
Buffer,
|
||||
Size);
|
||||
if (!NewBuffer)
|
||||
{
|
||||
skip("RtlReAllocateHeap failed for size %lu\n", Size);
|
||||
break;
|
||||
}
|
||||
Buffer = NewBuffer;
|
||||
ok_hex(RtlSizeHeap(RtlGetProcessHeap(), 0, Buffer), Size);
|
||||
ok(CheckBuffer(Buffer, OldSize, 0x7a), "CheckBuffer failed at size 0x%lx -> 0x%lx\n", OldSize, Size);
|
||||
ok(CheckBuffer(Buffer + OldSize, Size - OldSize, 0), "HEAP_ZERO_MEMORY not respected for 0x%lx -> 0x%lx\n", OldSize, Size);
|
||||
OldSize = Size;
|
||||
}
|
||||
RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer);
|
||||
}
|
||||
|
|
@ -31,6 +31,7 @@ extern void func_RtlGetLengthWithoutTrailingPathSeperators(void);
|
|||
extern void func_RtlGetLongestNtPathLength(void);
|
||||
extern void func_RtlInitializeBitMap(void);
|
||||
extern void func_RtlMemoryStream(void);
|
||||
extern void func_RtlReAllocateHeap(void);
|
||||
extern void func_StackOverflow(void);
|
||||
extern void func_TimerResolution(void);
|
||||
|
||||
|
@ -64,6 +65,7 @@ const struct test winetest_testlist[] =
|
|||
{ "RtlGetLongestNtPathLength", func_RtlGetLongestNtPathLength },
|
||||
{ "RtlInitializeBitMap", func_RtlInitializeBitMap },
|
||||
{ "RtlMemoryStream", func_RtlMemoryStream },
|
||||
{ "RtlReAllocateHeap", func_RtlReAllocateHeap },
|
||||
{ "StackOverflow", func_StackOverflow },
|
||||
{ "TimerResolution", func_TimerResolution },
|
||||
|
||||
|
|
Loading…
Reference in a new issue