//\r
UnicodeSPrint (Buffer, sizeof (Buffer), L"Boot%04x", *mBootNext);\r
BootOption = BdsLibVariableToOption (&BootLists, Buffer);\r
+ \r
+ //\r
+ // If fail to get boot option from variable, just return and do nothing.\r
+ //\r
+ if (BootOption == NULL) {\r
+ return;\r
+ }\r
+ \r
BootOption->BootCurrent = *mBootNext;\r
}\r
//\r
break;\r
\r
case FORM_BOOT_DEL_ID:\r
+ ASSERT (BootOptionMenu.MenuNumber <= (sizeof (CurrentFakeNVMap->BootOptionDel) / sizeof (UINT8)));\r
for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);\r
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
break;\r
\r
case FORM_DRV_DEL_ID:\r
+ ASSERT (DriverOptionMenu.MenuNumber <= (sizeof (CurrentFakeNVMap->DriverOptionDel) / sizeof (UINT8)));\r
for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (&DriverOptionMenu, Index);\r
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
\r
NewTerminalContext->BaudRateIndex = CurrentFakeNVMap->COMBaudRate;\r
+ ASSERT (CurrentFakeNVMap->COMBaudRate < (sizeof (BaudRateList) / sizeof (BaudRateList[0])));\r
NewTerminalContext->BaudRate = BaudRateList[CurrentFakeNVMap->COMBaudRate].Value;\r
NewTerminalContext->DataBitsIndex = CurrentFakeNVMap->COMDataRate;\r
+ ASSERT (CurrentFakeNVMap->COMDataRate < (sizeof (DataBitsList) / sizeof (DataBitsList[0])));\r
NewTerminalContext->DataBits = (UINT8) DataBitsList[CurrentFakeNVMap->COMDataRate].Value;\r
NewTerminalContext->StopBitsIndex = CurrentFakeNVMap->COMStopBits;\r
+ ASSERT (CurrentFakeNVMap->COMStopBits < (sizeof (StopBitsList) / sizeof (StopBitsList[0])));\r
NewTerminalContext->StopBits = (UINT8) StopBitsList[CurrentFakeNVMap->COMStopBits].Value;\r
NewTerminalContext->ParityIndex = CurrentFakeNVMap->COMParity;\r
+ ASSERT (CurrentFakeNVMap->COMParity < (sizeof (ParityList) / sizeof (ParityList[0])));\r
NewTerminalContext->Parity = (UINT8) ParityList[CurrentFakeNVMap->COMParity].Value;\r
NewTerminalContext->TerminalType = CurrentFakeNVMap->COMTerminalType;\r
\r
break;\r
\r
case FORM_CON_IN_ID:\r
+ ASSERT ((ConsoleInpMenu.MenuNumber + TerminalMenu.MenuNumber) <= (sizeof (CurrentFakeNVMap->ConsoleCheck) / sizeof (UINT8)));\r
for (Index = 0; Index < ConsoleInpMenu.MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (&ConsoleInpMenu, Index);\r
NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
break;\r
\r
case FORM_CON_OUT_ID:\r
+ ASSERT ((ConsoleOutMenu.MenuNumber + TerminalMenu.MenuNumber) <= (sizeof (CurrentFakeNVMap->ConsoleCheck) / sizeof (UINT8)));\r
for (Index = 0; Index < ConsoleOutMenu.MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (&ConsoleOutMenu, Index);\r
NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
break;\r
\r
case FORM_CON_ERR_ID:\r
+ ASSERT ((ConsoleErrMenu.MenuNumber + TerminalMenu.MenuNumber) <= (sizeof (CurrentFakeNVMap->ConsoleCheck) / sizeof (UINT8)));\r
for (Index = 0; Index < ConsoleErrMenu.MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (&ConsoleErrMenu, Index);\r
NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
break;\r
\r
case FORM_BOOT_DEL_ID:\r
+ ASSERT (BootOptionMenu.MenuNumber <= (sizeof (CurrentFakeNVMap->BootOptionDel) / sizeof (CurrentFakeNVMap->BootOptionDel[0])));\r
for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
CurrentFakeNVMap->BootOptionDel[Index] = 0x00;\r
}\r
break;\r
\r
case FORM_DRV_DEL_ID:\r
+ ASSERT (DriverOptionMenu.MenuNumber <= (sizeof (CurrentFakeNVMap->DriverOptionDel) / sizeof (CurrentFakeNVMap->DriverOptionDel[0])));\r
for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {\r
CurrentFakeNVMap->DriverOptionDel[Index] = 0x00;\r
}\r
\r
@param CallbackData The BMM context data.\r
\r
- @return The number of the Var Boot####.\r
+ @return EFI_NOT_FOUND Fail to find "BootOrder" variable.\r
+ @return EFI_SUCESS Success build boot option menu.\r
\r
**/\r
EFI_STATUS\r
&gEfiGlobalVariableGuid,\r
&BootOrderListSize\r
);\r
-\r
+ if (BootOrderList == NULL) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
+ \r
//\r
// Get the BootNext from the Var\r
//\r
FreePool (BootOrderList);\r
}\r
BootOptionMenu.MenuNumber = MenuCount;\r
- return MenuCount;\r
+ return EFI_SUCCESS;\r
}\r
\r
/**\r
\r
@param CallbackData The BMM context data.\r
\r
- @return EFI_SUCESS The functin completes successfully.\r
+ @retval EFI_SUCESS The functin completes successfully.\r
@retval EFI_OUT_OF_RESOURCES Not enough memory to compete the operation.\r
- \r
+ @retval EFI_NOT_FOUND Fail to get "DriverOrder" variable.\r
\r
**/\r
EFI_STATUS\r
&gEfiGlobalVariableGuid,\r
&DriverOrderListSize\r
);\r
-\r
+ if (DriverOrderList == NULL) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
+ \r
for (Index = 0; Index < DriverOrderListSize / sizeof (UINT16); Index++) {\r
UnicodeSPrint (\r
DriverString,\r
\r
#include "BootMaint.h"\r
\r
-/**\r
- Function creates a device path data structure that identically matches the\r
- device path passed in.\r
-\r
- @param DevPath A pointer to a device path data structure.\r
-\r
- @return The new copy of DevPath is created to identically match the input.\r
- @retval NULL Otherwise, NULL is returned.\r
-\r
-**/\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevicePathInstanceDup (\r
- IN EFI_DEVICE_PATH_PROTOCOL *DevPath\r
- );\r
-\r
/**\r
Update Com Ports attributes from DevicePath\r
\r
\r
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
CopyMem (&NewMenuEntry->OptionNumber, &Acpi->UID, sizeof (UINT32));\r
- NewTerminalContext->DevicePath = DevicePathInstanceDup (DevicePath);\r
+ NewTerminalContext->DevicePath = DuplicateDevicePath (DevicePath);\r
//\r
// BugBug: I have no choice, calling EfiLibStrFromDatahub will hang the system!\r
// coz' the misc data for each platform is not correct, actually it's the device path stored in\r
/**\r
Update Com Ports attributes from DevicePath\r
\r
-\r
@param DevicePath DevicePath that contains Com ports\r
\r
@retval EFI_SUCCESS The update is successful.\r
return EFI_SUCCESS;\r
}\r
\r
-/**\r
- Function creates a device path data structure that identically matches the\r
- device path passed in.\r
-\r
-\r
- @param DevPath A pointer to a device path data structure.\r
-\r
- @return The new copy of DevPath is created to identically match the input.\r
- @retval NULL Otherwise, NULL is returned.\r
-\r
-**/\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-DevicePathInstanceDup (\r
- IN EFI_DEVICE_PATH_PROTOCOL *DevPath\r
- )\r
-{\r
- EFI_DEVICE_PATH_PROTOCOL *NewDevPath;\r
- EFI_DEVICE_PATH_PROTOCOL *DevicePathInst;\r
- EFI_DEVICE_PATH_PROTOCOL *Temp;\r
- UINT8 *Ptr;\r
- UINTN Size;\r
-\r
- //\r
- // get the size of an instance from the input\r
- //\r
- Temp = DevPath;\r
- DevicePathInst = GetNextDevicePathInstance (&Temp, &Size);\r
-\r
- //\r
- // Make a copy and set proper end type\r
- //\r
- NewDevPath = NULL;\r
- if (Size != 0) {\r
- NewDevPath = AllocateZeroPool (Size);\r
- ASSERT (NewDevPath != NULL);\r
- }\r
-\r
- if (NewDevPath != NULL) {\r
- CopyMem (NewDevPath, DevicePathInst, Size);\r
- Ptr = (UINT8 *) NewDevPath;\r
- Ptr += Size - sizeof (EFI_DEVICE_PATH_PROTOCOL);\r
- Temp = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;\r
- SetDevicePathEndNode (Temp);\r
- }\r
-\r
- return NewDevPath;\r
-}\r
-\r
/**\r
Build up Console Menu based on types passed in. The type can\r
be BM_CONSOLE_IN_CONTEXT_SELECT, BM_CONSOLE_OUT_CONTEXT_SELECT\r
NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
NewMenuEntry->OptionNumber = Index2;\r
\r
- NewConsoleContext->DevicePath = DevicePathInstanceDup (DevicePathInst);\r
+ NewConsoleContext->DevicePath = DuplicateDevicePath (DevicePathInst);\r
NewMenuEntry->DisplayString = EfiLibStrFromDatahub (NewConsoleContext->DevicePath);\r
if (NULL == NewMenuEntry->DisplayString) {\r
NewMenuEntry->DisplayString = DevicePathToStr (NewConsoleContext->DevicePath);\r
BDS_COMMON_OPTION *Option;\r
\r
Option = (BDS_COMMON_OPTION *) AllocatePool (sizeof (BDS_COMMON_OPTION));\r
+ ASSERT (Option != NULL);\r
Option->Description = FileContext->FileName;\r
Option->DevicePath = FileContext->DevicePath;\r
Option->LoadOptionsSize = 0;\r
UpdatePageStart (CallbackData);\r
CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);\r
\r
+ ASSERT (BootOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.BootOptionDel) / sizeof (CallbackData->BmmFakeNvData.BootOptionDel[0])));\r
for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);\r
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
UpdatePageStart (CallbackData);\r
\r
CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &DriverOptionMenu);\r
-\r
+ \r
+ ASSERT (DriverOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.DriverOptionDel) / sizeof (CallbackData->BmmFakeNvData.DriverOptionDel[0])));\r
for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (&DriverOptionMenu, Index);\r
\r
\r
UpdatePageStart (CallbackData);\r
\r
+ ASSERT (ConsoleMenu->MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.ConsoleCheck) / sizeof (CallbackData->BmmFakeNvData.ConsoleCheck[0])));\r
for (Index = 0; Index < ConsoleMenu->MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);\r
NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
ZeroMem (CallbackData->BmmFakeNvData.OptionOrder, 100);\r
\r
IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * OptionMenu->MenuNumber);\r
- if (NULL == IfrOptionList) {\r
+ if (IfrOptionList == NULL) {\r
return ;\r
}\r
-\r
+ \r
+ ASSERT (OptionMenu->MenuNumber <= (sizeof (IfrOptionList) / sizeof (IfrOptionList[0])));\r
for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);\r
IfrOptionList[Index].StringToken = NewMenuEntry->DisplayStringToken;\r
if (EFI_ERROR (Status)) {\r
continue;\r
}\r
+ \r
//\r
// Build mode string Column x Row\r
//\r
UnicodeValueToString (ModeString, 0, Col, 0);\r
+ ASSERT ((StrLen (ModeString) + 1) < (sizeof (ModeString) / sizeof (ModeString[0])));\r
StrCat (ModeString, L" x ");\r
UnicodeValueToString (RowString, 0, Row, 0);\r
+ ASSERT ((StrLen (ModeString) + StrLen(RowString)) < (sizeof (ModeString) / sizeof (ModeString[0])));\r
StrCat (ModeString, RowString);\r
\r
HiiLibNewString (CallbackData->BmmHiiHandle, &ModeToken[Index], ModeString);\r
&gEfiGlobalVariableGuid,\r
&OrderSize\r
);\r
-\r
+ \r
+ if (OrderBuffer == NULL) {\r
+ return NULL;\r
+ }\r
+ \r
for (Index = 0; Index < OrderSize / sizeof (UINT16); Index++) {\r
UnicodeSPrint (StrTemp, 100, L"Boot%04x", OrderBuffer[Index]);\r
OptionBuffer = BdsLibGetVariableAndSize (\r
OldData = CallbackData->BmmOldFakeNVData.LegacyBEV;\r
break;\r
\r
+ default:\r
+ DEBUG ((EFI_D_ERROR, "Invalid command ID for updating page!\n"));\r
+ return;\r
}\r
\r
CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);\r
) {\r
Vendor.Header.Type = MESSAGING_DEVICE_PATH;\r
Vendor.Header.SubType = MSG_VENDOR_DP;\r
+ \r
+ ASSERT (NewTerminalContext->TerminalType < (sizeof (TerminalTypeGuid) / sizeof (TerminalTypeGuid[0])));\r
CopyMem (\r
&Vendor.Guid,\r
&TerminalTypeGuid[NewTerminalContext->TerminalType],\r
FreePool (BootOrderList);\r
}\r
\r
+ ASSERT (BootOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.OptionOrder) / sizeof (CallbackData->BmmFakeNvData.OptionOrder[0])));\r
for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
NewBootOrderList[Index] = (UINT16) (CallbackData->BmmFakeNvData.OptionOrder[Index] - 1);\r
}\r
FreePool (DriverOrderList);\r
}\r
\r
+ ASSERT (DriverOrderListSize <= (sizeof (CallbackData->BmmFakeNvData.OptionOrder) / sizeof (CallbackData->BmmFakeNvData.OptionOrder[0])));\r
for (Index = 0; Index < DriverOrderListSize; Index++) {\r
NewDriverOrderList[Index] = (UINT16) (CallbackData->BmmFakeNvData.OptionOrder[Index] - 1);\r
}\r
TempStr = DevicePathToStr (Option->DevicePath);\r
TempSize = StrSize (TempStr);\r
HelpString = AllocateZeroPool (TempSize + StrSize (L"Device Path : "));\r
+ ASSERT (HelpString != NULL);\r
StrCat (HelpString, L"Device Path : ");\r
StrCat (HelpString, TempStr);\r
\r
// Get all the Hii handles\r
//\r
Status = HiiLibGetHiiHandles (&HandleBufferLength, &HiiHandles);\r
- ASSERT_EFI_ERROR (Status);\r
+ ASSERT_EFI_ERROR (Status && (HiiHandles != NULL));\r
\r
HiiHandle = gDeviceManagerPrivate.HiiHandle;\r
\r
information for the key that was pressed.\r
\r
@retval EFI_SUCCESS KeyData is successfully processed.\r
-\r
+ @return EFI_NOT_FOUND Fail to find boot option variable.\r
**/\r
EFI_STATUS\r
HotkeyCallback (\r
//\r
// Is this Key Stroke we are waiting for?\r
//\r
+ ASSERT (Hotkey->WaitingKey < (sizeof (Hotkey->KeyData) / sizeof (Hotkey->KeyData[0])));\r
HotkeyData = &Hotkey->KeyData[Hotkey->WaitingKey];\r
if ((KeyData->Key.ScanCode == HotkeyData->Key.ScanCode) &&\r
(KeyData->Key.UnicodeChar == HotkeyData->Key.UnicodeChar) &&\r
\r
UnicodeSPrint (Buffer, sizeof (Buffer), L"Boot%04x", Hotkey->BootOptionNumber);\r
BootOption = BdsLibVariableToOption (&BootLists, Buffer);\r
+ if (BootOption == NULL) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
BootOption->BootCurrent = Hotkey->BootOptionNumber;\r
BdsLibConnectDevicePath (BootOption->DevicePath);\r
\r
if (GraphicsOutput != NULL) {\r
SizeOfX = GraphicsOutput->Mode->Info->HorizontalResolution;\r
SizeOfY = GraphicsOutput->Mode->Info->VerticalResolution;\r
- } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
+ } else if (UgaDraw != NULL) {\r
Status = UgaDraw->GetMode (\r
UgaDraw,\r
&SizeOfX,\r