UINTN VariableNameLen;\r
UINTN Index;\r
UINTN Uint;\r
+ EFI_BOOT_MANAGER_LOAD_OPTION_TYPE LocalOptionType;\r
+ UINT16 LocalOptionNumber;\r
\r
if (VariableName == NULL) {\r
return FALSE;\r
\r
VariableNameLen = StrLen (VariableName);\r
\r
+ //\r
+ // Return FALSE when the variable name length is too small.\r
+ //\r
if (VariableNameLen <= 4) {\r
return FALSE;\r
}\r
\r
- for (Index = 0; Index < ARRAY_SIZE (mBmLoadOptionName); Index++) {\r
- if ((VariableNameLen - 4 == StrLen (mBmLoadOptionName[Index])) &&\r
- (StrnCmp (VariableName, mBmLoadOptionName[Index], VariableNameLen - 4) == 0)\r
+ //\r
+ // Return FALSE when the variable name doesn't start with Driver/SysPrep/Boot/PlatformRecovery.\r
+ //\r
+ for (LocalOptionType = 0; LocalOptionType < ARRAY_SIZE (mBmLoadOptionName); LocalOptionType++) {\r
+ if ((VariableNameLen - 4 == StrLen (mBmLoadOptionName[LocalOptionType])) &&\r
+ (StrnCmp (VariableName, mBmLoadOptionName[LocalOptionType], VariableNameLen - 4) == 0)\r
) {\r
break;\r
}\r
}\r
+ if (LocalOptionType == ARRAY_SIZE (mBmLoadOptionName)) {\r
+ return FALSE;\r
+ }\r
\r
- if (Index == ARRAY_SIZE (mBmLoadOptionName)) {\r
+ //\r
+ // Return FALSE when the last four characters are not hex digits.\r
+ //\r
+ LocalOptionNumber = 0;\r
+ for (Index = VariableNameLen - 4; Index < VariableNameLen; Index++) {\r
+ Uint = BmCharToUint (VariableName[Index]);\r
+ if (Uint == -1) {\r
+ break;\r
+ } else {\r
+ LocalOptionNumber = (UINT16) Uint + LocalOptionNumber * 0x10;\r
+ }\r
+ }\r
+ if (Index != VariableNameLen) {\r
return FALSE;\r
}\r
\r
if (OptionType != NULL) {\r
- *OptionType = (EFI_BOOT_MANAGER_LOAD_OPTION_TYPE) Index;\r
+ *OptionType = LocalOptionType;\r
}\r
\r
if (OptionNumber != NULL) {\r
- *OptionNumber = 0;\r
- for (Index = VariableNameLen - 4; Index < VariableNameLen; Index++) {\r
- Uint = BmCharToUint (VariableName[Index]);\r
- if (Uint == -1) {\r
- break;\r
- } else {\r
- *OptionNumber = (UINT16) Uint + *OptionNumber * 0x10;\r
- }\r
- }\r
+ *OptionNumber = LocalOptionNumber;\r
}\r
\r
- return (BOOLEAN) (Index == VariableNameLen);\r
+ return TRUE;\r
}\r
\r
/**\r