Fix for RtlUnicodeStringToInteger

svn path=/trunk/; revision=1655
This commit is contained in:
Eric Kohl 2001-03-01 15:30:36 +00:00
parent 574a1b82f4
commit bf9d9a12e7

View file

@ -1,4 +1,4 @@
/* $Id: unicode.c,v 1.17 2000/12/29 13:48:30 ekohl Exp $ /* $Id: unicode.c,v 1.18 2001/03/01 15:30:36 ekohl Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -1181,12 +1181,14 @@ RtlUnicodeStringToAnsiString (
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
NTSTATUS NTSTATUS
STDCALL STDCALL
RtlUnicodeStringToInteger ( RtlUnicodeStringToInteger (
IN PUNICODE_STRING String, IN PUNICODE_STRING String,
IN ULONG Base, IN ULONG Base,
OUT PULONG Value) OUT PULONG Value
)
{ {
PWCHAR Str; PWCHAR Str;
ULONG lenmin = 0; ULONG lenmin = 0;
@ -1194,8 +1196,10 @@ RtlUnicodeStringToInteger (
ULONG Val; ULONG Val;
BOOLEAN addneg = FALSE; BOOLEAN addneg = FALSE;
*Value = 0;
Str = String->Buffer; Str = String->Buffer;
for (i = 0; i < String->Length; i++)
for (i = 0; i < String->Length / sizeof(WCHAR); i++)
{ {
if (*Str == L'b') if (*Str == L'b')
{ {
@ -1228,24 +1232,20 @@ RtlUnicodeStringToInteger (
} }
else if ((*Str > L'1') && (Base == 2)) else if ((*Str > L'1') && (Base == 2))
{ {
*Value = 0;
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
} }
else if (((*Str > L'7') || (*Str < L'0')) && (Base == 8)) else if (((*Str > L'7') || (*Str < L'0')) && (Base == 8))
{ {
*Value = 0;
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
} }
else if (((*Str > L'9') || (*Str < L'0')) && (Base == 10)) else if (((*Str > L'9') || (*Str < L'0')) && (Base == 10))
{ {
*Value = 0;
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
} }
else if ((((*Str > L'9') || (*Str < L'0')) || else if ((((*Str > L'9') || (*Str < L'0')) ||
((towupper (*Str) > L'F') || ((towupper (*Str) > L'F') ||
(towupper (*Str) < L'A'))) && (Base == 16)) (towupper (*Str) < L'A'))) && (Base == 16))
{ {
*Value = 0;
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
} }
else else