ShellPkg/ShellLib: Fix a bug in InternalShellIsHexOrDecimalNumber
InternalShellIsHexOrDecimalNumber() wrongly treats "-" as a number. The patch fixes this issue. REF: https://bugzilla.tianocore.org/show_bug.cgi?id=730 Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Cc: Vladimir Olovyannikov <vladimir.olovyannikov@broadcom.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
This commit is contained in:
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
||||||
Copyright 2016 Dell Inc.
|
Copyright 2016 Dell Inc.
|
||||||
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -3636,29 +3636,36 @@ InternalShellIsHexOrDecimalNumber (
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
BOOLEAN Hex;
|
BOOLEAN Hex;
|
||||||
|
BOOLEAN LeadingZero;
|
||||||
|
|
||||||
|
if (String == NULL) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// chop off a single negative sign
|
// chop off a single negative sign
|
||||||
//
|
//
|
||||||
if (String != NULL && *String == L'-') {
|
if (*String == L'-') {
|
||||||
String++;
|
String++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (String == NULL) {
|
if (*String == CHAR_NULL) {
|
||||||
return (FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// chop leading zeroes
|
// chop leading zeroes
|
||||||
//
|
//
|
||||||
while(String != NULL && *String == L'0'){
|
LeadingZero = FALSE;
|
||||||
|
while(*String == L'0'){
|
||||||
String++;
|
String++;
|
||||||
|
LeadingZero = TRUE;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// allow '0x' or '0X', but not 'x' or 'X'
|
// allow '0x' or '0X', but not 'x' or 'X'
|
||||||
//
|
//
|
||||||
if (String != NULL && (*String == L'x' || *String == L'X')) {
|
if (*String == L'x' || *String == L'X') {
|
||||||
if (*(String-1) != L'0') {
|
if (!LeadingZero) {
|
||||||
//
|
//
|
||||||
// we got an x without a preceeding 0
|
// we got an x without a preceeding 0
|
||||||
//
|
//
|
||||||
@ -3675,7 +3682,7 @@ InternalShellIsHexOrDecimalNumber (
|
|||||||
//
|
//
|
||||||
// loop through the remaining characters and use the lib function
|
// loop through the remaining characters and use the lib function
|
||||||
//
|
//
|
||||||
for ( ; String != NULL && *String != CHAR_NULL && !(StopAtSpace && *String == L' ') ; String++){
|
for ( ; *String != CHAR_NULL && !(StopAtSpace && *String == L' ') ; String++){
|
||||||
if (TimeNumbers && (String[0] == L':')) {
|
if (TimeNumbers && (String[0] == L':')) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user