Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106/* * PROJECT: ReactOS API Tests * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) * PURPOSE: Test for RtlValidateUnicodeString * COPYRIGHT: Copyright 2020 Hermes Belusca-Maito */
#include "precomp.h"
START_TEST(RtlValidateUnicodeString){ NTSTATUS Status; UNICODE_STRING String; UNICODE_STRING ValidString = RTL_CONSTANT_STRING(L"My Wild String!");
/* Start with a valid Unicode string */ String = ValidString;
/* Non-zero flags are unsupported! */ Status = RtlValidateUnicodeString(0, &String); ok(Status == STATUS_SUCCESS, "Status = 0x%lx\n", Status); Status = RtlValidateUnicodeString(1, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status); Status = RtlValidateUnicodeString(0xdeadbeef, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status);
/* Empty string is allowed. Test also the flags. */ RtlInitEmptyUnicodeString(&String, NULL, 0); Status = RtlValidateUnicodeString(0, &String); ok(Status == STATUS_SUCCESS, "Status = 0x%lx\n", Status); Status = RtlValidateUnicodeString(1, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status); Status = RtlValidateUnicodeString(0xdeadbeef, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status);
// With a non-NULL but empty buffer, and zero lengths. RtlInitEmptyUnicodeString(&String, L"", 0); Status = RtlValidateUnicodeString(0, &String); ok(Status == STATUS_SUCCESS, "Status = 0x%lx\n", Status); Status = RtlValidateUnicodeString(1, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status); Status = RtlValidateUnicodeString(0xdeadbeef, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status);
// With a non-NULL but empty buffer, and zero Length, non-zero MaximumLength. RtlInitEmptyUnicodeString(&String, L"", sizeof(WCHAR)); String.Length = 0; Status = RtlValidateUnicodeString(0, &String); ok(Status == STATUS_SUCCESS, "Status = 0x%lx\n", Status); Status = RtlValidateUnicodeString(1, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status); Status = RtlValidateUnicodeString(0xdeadbeef, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status);
/* NULL pointer is also allowed! Test also the flags. */ Status = RtlValidateUnicodeString(0, NULL); ok(Status == STATUS_SUCCESS, "Status = 0x%lx\n", Status); Status = RtlValidateUnicodeString(1, NULL); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status); Status = RtlValidateUnicodeString(0xdeadbeef, NULL); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status);
/* * Now test invalid strings. */
// NULL buffer but non-zero lengths. String = ValidString; String.Buffer = NULL; Status = RtlValidateUnicodeString(0, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status);
// NULL buffer, zero Length, non-zero MaximumLength. String = ValidString; String.Buffer = NULL; String.Length = 0; Status = RtlValidateUnicodeString(0, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status);
// NULL buffer, non-zero Length, zero MaximumLength // (tests also the case Length > MaximumLength that must fail). String = ValidString; String.Buffer = NULL; String.MaximumLength = 0; Status = RtlValidateUnicodeString(0, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status);
// Non-NULL buffer, non-zero Length, zero MaximumLength. String = ValidString; String.MaximumLength = 0; Status = RtlValidateUnicodeString(0, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status);
/* Non-NULL buffer, odd lengths */
String = ValidString; String.Length--; // Length was already >= 2 so it remains > 0. Status = RtlValidateUnicodeString(0, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status);
String.MaximumLength--; // MaximumLength was already >= 2 so it remains > 0. Status = RtlValidateUnicodeString(0, &String); ok(Status == STATUS_INVALID_PARAMETER, "Status = 0x%lx\n", Status);}