From 484ec5bcf75d8f5811020a7c3f0474d6446f2dfe Mon Sep 17 00:00:00 2001 From: Thomas Bluemel Date: Fri, 30 Dec 2005 00:18:48 +0000 Subject: [PATCH] fixed returned status code in RtlAnsiStringToUnicodeString and properly free allocated memory in case converting the string failed svn path=/trunk/; revision=20449 --- reactos/lib/rtl/unicode.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/reactos/lib/rtl/unicode.c b/reactos/lib/rtl/unicode.c index a988c5848c1..9b29db30cf4 100644 --- a/reactos/lib/rtl/unicode.c +++ b/reactos/lib/rtl/unicode.c @@ -75,15 +75,15 @@ RtlAnsiStringToUnicodeString( if (Length > MAXUSHORT) return STATUS_INVALID_PARAMETER_2; UniDest->Length = (USHORT)Length - sizeof(WCHAR); - if (AllocateDestinationString == TRUE) + if (AllocateDestinationString) { UniDest->Buffer = RtlpAllocateStringMemory(Length, TAG_USTR); UniDest->MaximumLength = Length; if (!UniDest->Buffer) return STATUS_NO_MEMORY; } - else if (Length >= UniDest->MaximumLength) + else if (UniDest->Length >= UniDest->MaximumLength) { - return STATUS_BUFFER_TOO_SMALL; + return STATUS_BUFFER_OVERFLOW; } Status = RtlMultiByteToUnicodeN(UniDest->Buffer, @@ -92,9 +92,13 @@ RtlAnsiStringToUnicodeString( AnsiSource->Buffer, AnsiSource->Length); - if (!NT_SUCCESS(Status) && AllocateDestinationString) + if (!NT_SUCCESS(Status)) { - RtlpFreeStringMemory(UniDest->Buffer, TAG_USTR); + if (AllocateDestinationString) + { + RtlpFreeStringMemory(UniDest->Buffer, TAG_USTR); + UniDest->Buffer = NULL; + } return Status; } -- 2.17.1