fixed returned status code in RtlAnsiStringToUnicodeString and properly free allocate...
authorThomas Bluemel <thomas@reactsoft.com>
Fri, 30 Dec 2005 00:18:48 +0000 (00:18 +0000)
committerThomas Bluemel <thomas@reactsoft.com>
Fri, 30 Dec 2005 00:18:48 +0000 (00:18 +0000)
svn path=/trunk/; revision=20449

reactos/lib/rtl/unicode.c

index a988c58..9b29db3 100644 (file)
@@ -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;
     }