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; }