[KMTESTS]

- Add a test showing RtlUpcaseUnicodeString behavior with zero-length strings
- Run all test cases against FsRtlIsNameInExpressionTest on checked builds, only the Dbcs version asserts
CORE-9254

svn path=/trunk/; revision=66479
This commit is contained in:
Thomas Faber 2015-02-27 22:42:35 +00:00
parent b9809e6704
commit 49bb368ddc
4 changed files with 86 additions and 7 deletions

View file

@ -56,6 +56,7 @@ typedef ULONG LOGICAL, *PLOGICAL;
#define RtlCopyMemoryNonTemporal RtlCopyMemory #define RtlCopyMemoryNonTemporal RtlCopyMemory
#define RtlPrefetchMemoryNonTemporal(s, l) #define RtlPrefetchMemoryNonTemporal(s, l)
#define ExRaiseStatus RtlRaiseStatus #define ExRaiseStatus RtlRaiseStatus
#define KmtIsCheckedBuild FALSE
#endif /* defined KMT_EMULATE_KERNEL */ #endif /* defined KMT_EMULATE_KERNEL */
#endif /* defined KMT_USER_MODE */ #endif /* defined KMT_USER_MODE */

View file

@ -59,6 +59,7 @@ KMT_TESTFUNC Test_RtlIntSafe;
KMT_TESTFUNC Test_RtlMemory; KMT_TESTFUNC Test_RtlMemory;
KMT_TESTFUNC Test_RtlRegistry; KMT_TESTFUNC Test_RtlRegistry;
KMT_TESTFUNC Test_RtlSplayTree; KMT_TESTFUNC Test_RtlSplayTree;
KMT_TESTFUNC Test_RtlUnicodeString;
KMT_TESTFUNC Test_ZwAllocateVirtualMemory; KMT_TESTFUNC Test_ZwAllocateVirtualMemory;
KMT_TESTFUNC Test_ZwCreateSection; KMT_TESTFUNC Test_ZwCreateSection;
KMT_TESTFUNC Test_ZwMapViewOfSection; KMT_TESTFUNC Test_ZwMapViewOfSection;
@ -117,6 +118,7 @@ const KMT_TEST TestList[] =
{ "RtlMemoryKM", Test_RtlMemory }, { "RtlMemoryKM", Test_RtlMemory },
{ "RtlRegistryKM", Test_RtlRegistry }, { "RtlRegistryKM", Test_RtlRegistry },
{ "RtlSplayTreeKM", Test_RtlSplayTree }, { "RtlSplayTreeKM", Test_RtlSplayTree },
{ "RtlUnicodeStringKM", Test_RtlUnicodeString },
{ "ZwAllocateVirtualMemory", Test_ZwAllocateVirtualMemory }, { "ZwAllocateVirtualMemory", Test_ZwAllocateVirtualMemory },
{ "ZwCreateSection", Test_ZwCreateSection }, { "ZwCreateSection", Test_ZwCreateSection },
{ "ZwMapViewOfSection", Test_ZwMapViewOfSection }, { "ZwMapViewOfSection", Test_ZwMapViewOfSection },

View file

@ -184,10 +184,6 @@ static VOID FsRtlIsNameInExpressionTest()
UNICODE_STRING Expression; UNICODE_STRING Expression;
UNICODE_STRING Name; UNICODE_STRING Name;
/* Don't run Tests which are known to assert in checked builds */
if (KmtIsCheckedBuild && Tests[i].AssertsInChecked)
continue;
RtlInitUnicodeString(&Expression, Tests[i].Expression); RtlInitUnicodeString(&Expression, Tests[i].Expression);
RtlInitUnicodeString(&Name, Tests[i].Name); RtlInitUnicodeString(&Name, Tests[i].Name);

View file

@ -173,7 +173,87 @@ TestFindCharInUnicodeString(VOID)
#endif #endif
} }
static
VOID
TestUpcaseUnicodeString(VOID)
{
NTSTATUS Status;
UNICODE_STRING Lower;
UNICODE_STRING Upper;
PWCHAR Buffer;
Buffer = KmtAllocateGuarded(sizeof(WCHAR));
if (!KmtIsCheckedBuild)
{
RtlInitEmptyUnicodeString(&Lower, NULL, 0);
RtlFillMemory(&Upper, sizeof(Upper), 0x55);
Status = RtlUpcaseUnicodeString(&Upper, &Lower, TRUE);
ok_eq_hex(Status, STATUS_SUCCESS);
ok_eq_uint(Upper.Length, 0);
ok_eq_uint(Upper.MaximumLength, 0);
ok(Upper.Buffer != NULL, "Buffer = %p\n", Upper.Buffer);
RtlFreeUnicodeString(&Upper);
RtlInitEmptyUnicodeString(&Lower, Buffer, 0);
RtlFillMemory(&Upper, sizeof(Upper), 0x55);
Status = RtlUpcaseUnicodeString(&Upper, &Lower, TRUE);
ok_eq_hex(Status, STATUS_SUCCESS);
ok_eq_uint(Upper.Length, 0);
ok_eq_uint(Upper.MaximumLength, 0);
ok(Upper.Buffer != NULL, "Buffer = %p\n", Upper.Buffer);
RtlFreeUnicodeString(&Upper);
RtlInitEmptyUnicodeString(&Lower, Buffer, sizeof(WCHAR));
Buffer[0] = UNICODE_NULL;
RtlFillMemory(&Upper, sizeof(Upper), 0x55);
Status = RtlUpcaseUnicodeString(&Upper, &Lower, TRUE);
ok_eq_hex(Status, STATUS_SUCCESS);
ok_eq_uint(Upper.Length, 0);
ok_eq_uint(Upper.MaximumLength, 0);
ok(Upper.Buffer != NULL, "Buffer = %p\n", Upper.Buffer);
RtlFreeUnicodeString(&Upper);
}
RtlInitEmptyUnicodeString(&Lower, Buffer, sizeof(WCHAR));
Lower.Length = sizeof(WCHAR);
Buffer[0] = UNICODE_NULL;
RtlFillMemory(&Upper, sizeof(Upper), 0x55);
Status = RtlUpcaseUnicodeString(&Upper, &Lower, TRUE);
ok_eq_hex(Status, STATUS_SUCCESS);
ok_eq_uint(Upper.Length, sizeof(WCHAR));
ok_eq_uint(Upper.MaximumLength, sizeof(WCHAR));
ok(Upper.Buffer != NULL, "Buffer = %p\n", Upper.Buffer);
ok_eq_hex(Upper.Buffer[0], UNICODE_NULL);
RtlFreeUnicodeString(&Upper);
RtlInitEmptyUnicodeString(&Lower, Buffer, sizeof(WCHAR));
Lower.Length = sizeof(WCHAR);
Buffer[0] = 'a';
RtlFillMemory(&Upper, sizeof(Upper), 0x55);
Status = RtlUpcaseUnicodeString(&Upper, &Lower, TRUE);
ok_eq_hex(Status, STATUS_SUCCESS);
ok_eq_uint(Upper.Length, sizeof(WCHAR));
ok_eq_uint(Upper.MaximumLength, sizeof(WCHAR));
ok(Upper.Buffer != NULL, "Buffer = %p\n", Upper.Buffer);
ok_eq_hex(Upper.Buffer[0], 'A');
RtlFreeUnicodeString(&Upper);
RtlInitUnicodeString(&Lower, L"a");
RtlFillMemory(&Upper, sizeof(Upper), 0x55);
Status = RtlUpcaseUnicodeString(&Upper, &Lower, TRUE);
ok_eq_hex(Status, STATUS_SUCCESS);
ok_eq_uint(Upper.Length, sizeof(WCHAR));
ok_eq_uint(Upper.MaximumLength, sizeof(WCHAR));
ok(Upper.Buffer != NULL, "Buffer = %p\n", Upper.Buffer);
ok_eq_hex(Upper.Buffer[0], 'A');
RtlFreeUnicodeString(&Upper);
KmtFreeGuarded(Buffer);
}
START_TEST(RtlUnicodeString) START_TEST(RtlUnicodeString)
{ {
TestFindCharInUnicodeString(); TestFindCharInUnicodeString();
TestUpcaseUnicodeString();
} }