Module: wine Branch: master Commit: 5398e17d0ac88d3b300b6868c5d2a858c57d1095 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5398e17d0ac88d3b300b6868c5...
Author: Rob Shearman rob@codeweavers.com Date: Thu Jan 4 16:55:58 2007 +0000
ntdll: RtlInitUnicodeString on a string too long to fit in a UNICODE_STRING should set the it to have the maximum possible length and size rather than a modulus of the actual length.
Fix test failures for RtlInitUnicodeString on Windows XP upwards.
---
dlls/ntdll/rtlstr.c | 5 ++++- dlls/ntdll/tests/rtlstr.c | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/dlls/ntdll/rtlstr.c b/dlls/ntdll/rtlstr.c index 8e997e7..34336fd 100644 --- a/dlls/ntdll/rtlstr.c +++ b/dlls/ntdll/rtlstr.c @@ -215,7 +215,10 @@ void WINAPI RtlInitUnicodeString( { if ((target->Buffer = (PWSTR) source)) { - target->Length = strlenW(source) * sizeof(WCHAR); + unsigned int length = strlenW(source) * sizeof(WCHAR); + if (length > 0xfffc) + length = 0xfffc; + target->Length = length; target->MaximumLength = target->Length + sizeof(WCHAR); } else target->Length = target->MaximumLength = 0; diff --git a/dlls/ntdll/tests/rtlstr.c b/dlls/ntdll/tests/rtlstr.c index 52f0ee3..cc1606a 100644 --- a/dlls/ntdll/tests/rtlstr.c +++ b/dlls/ntdll/tests/rtlstr.c @@ -246,12 +246,12 @@ static void test_RtlInitUnicodeStringEx( uni.MaximumLength = 12345; uni.Buffer = (void *) 0xdeadbeef; pRtlInitUnicodeString(&uni, teststring2); - ok(uni.Length == 33920, + ok(uni.Length == 33920 /* <= Win2000 */ || uni.Length == 65532 /* >= Win XP */, "pRtlInitUnicodeString(&uni, 0) sets Length to %u, expected %u\n", - uni.Length, 33920); - ok(uni.MaximumLength == 33922, + uni.Length, 65532); + ok(uni.MaximumLength == 33922 /* <= Win2000 */ || uni.MaximumLength == 65534 /* >= Win XP */, "pRtlInitUnicodeString(&uni, 0) sets MaximumLength to %u, expected %u\n", - uni.MaximumLength, 33922); + uni.MaximumLength, 65534); ok(uni.Buffer == teststring2, "pRtlInitUnicodeString(&uni, 0) sets Buffer to %p, expected %p\n", uni.Buffer, teststring2);