fixed returned status code in RtlAnsiStringToUnicodeString and properly
free allocated memory in case converting the string failed
Modified: trunk/reactos/lib/rtl/unicode.c
_____
Modified: trunk/reactos/lib/rtl/unicode.c
--- trunk/reactos/lib/rtl/unicode.c 2005-12-29 22:54:24 UTC (rev
20448)
+++ trunk/reactos/lib/rtl/unicode.c 2005-12-30 00:18:48 UTC (rev
20449)
@@ -75,15 +75,15 @@
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 @@
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;
}