mirror of
https://github.com/reactos/reactos.git
synced 2024-08-12 06:06:27 +00:00
fixed returned status code in RtlAnsiStringToUnicodeString and properly free allocated memory in case converting the string failed
svn path=/trunk/; revision=20449
This commit is contained in:
parent
7d203ec76d
commit
484ec5bcf7
|
@ -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))
|
||||
{
|
||||
if (AllocateDestinationString)
|
||||
{
|
||||
RtlpFreeStringMemory(UniDest->Buffer, TAG_USTR);
|
||||
UniDest->Buffer = NULL;
|
||||
}
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue