From dc16331c75a1181fde737a8b970111edff21bfab Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Tue, 15 Feb 2005 20:48:38 +0000 Subject: [PATCH] Use local buffer in RtlUpcaseUnicodeStringToCountedOemString, if appropriate. --- dlls/ntdll/rtlstr.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/rtlstr.c b/dlls/ntdll/rtlstr.c index ccedf876b9b..e8db8459bb2 100644 --- a/dlls/ntdll/rtlstr.c +++ b/dlls/ntdll/rtlstr.c @@ -1071,8 +1071,14 @@ NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString( STRING *oem, { NTSTATUS ret; UNICODE_STRING upcase; + WCHAR tmp[32]; - if (!(ret = RtlUpcaseUnicodeString( &upcase, uni, TRUE ))) + upcase.Buffer = tmp; + upcase.MaximumLength = sizeof(tmp); + ret = RtlUpcaseUnicodeString( &upcase, uni, FALSE ); + if (ret == STATUS_BUFFER_OVERFLOW) ret = RtlUpcaseUnicodeString( &upcase, uni, TRUE ); + + if (!ret) { DWORD len = RtlUnicodeStringToOemSize( &upcase ) - 1; oem->Length = len; @@ -1093,7 +1099,7 @@ NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString( STRING *oem, } RtlUnicodeToOemN( oem->Buffer, oem->Length, NULL, upcase.Buffer, upcase.Length ); done: - RtlFreeUnicodeString( &upcase ); + if (upcase.Buffer != tmp) RtlFreeUnicodeString( &upcase ); } return ret; }