Refine soma code to make code run safely.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10877 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -2296,6 +2296,7 @@ UiDisplayMenu (
|
||||
//
|
||||
// Don't print anything if it is a NULL help token
|
||||
//
|
||||
ASSERT(MenuOption != NULL);
|
||||
if (MenuOption->ThisTag->Help == 0) {
|
||||
StringPtr = L"\0";
|
||||
} else {
|
||||
@@ -2372,6 +2373,16 @@ UiDisplayMenu (
|
||||
//
|
||||
case '+':
|
||||
case '-':
|
||||
//
|
||||
// If the screen has no menu items, and the user didn't select UiReset
|
||||
// ignore the selection and go back to reading keys.
|
||||
//
|
||||
if(IsListEmpty (&gMenuOption)) {
|
||||
ControlFlag = CfReadKey;
|
||||
break;
|
||||
}
|
||||
|
||||
ASSERT(MenuOption != NULL);
|
||||
Statement = MenuOption->ThisTag;
|
||||
if ((Statement->Operand == EFI_IFR_DATE_OP)
|
||||
|| (Statement->Operand == EFI_IFR_TIME_OP)
|
||||
@@ -2407,6 +2418,16 @@ UiDisplayMenu (
|
||||
|
||||
case ' ':
|
||||
if ((gClassOfVfr & FORMSET_CLASS_FRONT_PAGE) != FORMSET_CLASS_FRONT_PAGE) {
|
||||
//
|
||||
// If the screen has no menu items, and the user didn't select UiReset
|
||||
// ignore the selection and go back to reading keys.
|
||||
//
|
||||
if(IsListEmpty (&gMenuOption)) {
|
||||
ControlFlag = CfReadKey;
|
||||
break;
|
||||
}
|
||||
|
||||
ASSERT(MenuOption != NULL);
|
||||
if (MenuOption->ThisTag->Operand == EFI_IFR_CHECKBOX_OP && !MenuOption->GrayOut) {
|
||||
ScreenOperation = UiSelect;
|
||||
}
|
||||
@@ -2478,6 +2499,7 @@ UiDisplayMenu (
|
||||
case CfUiSelect:
|
||||
ControlFlag = CfCheckSelection;
|
||||
|
||||
ASSERT(MenuOption != NULL);
|
||||
Statement = MenuOption->ThisTag;
|
||||
if ((Statement->Operand == EFI_IFR_TEXT_OP) ||
|
||||
(Statement->Operand == EFI_IFR_DATE_OP) ||
|
||||
@@ -2744,11 +2766,13 @@ UiDisplayMenu (
|
||||
|
||||
case CfUiLeft:
|
||||
ControlFlag = CfCheckSelection;
|
||||
ASSERT(MenuOption != NULL);
|
||||
if ((MenuOption->ThisTag->Operand == EFI_IFR_DATE_OP) || (MenuOption->ThisTag->Operand == EFI_IFR_TIME_OP)) {
|
||||
if (MenuOption->Sequence != 0) {
|
||||
//
|
||||
// In the middle or tail of the Date/Time op-code set, go left.
|
||||
//
|
||||
ASSERT(NewPos != NULL);
|
||||
NewPos = NewPos->BackLink;
|
||||
}
|
||||
}
|
||||
@@ -2756,11 +2780,13 @@ UiDisplayMenu (
|
||||
|
||||
case CfUiRight:
|
||||
ControlFlag = CfCheckSelection;
|
||||
ASSERT(MenuOption != NULL);
|
||||
if ((MenuOption->ThisTag->Operand == EFI_IFR_DATE_OP) || (MenuOption->ThisTag->Operand == EFI_IFR_TIME_OP)) {
|
||||
if (MenuOption->Sequence != 2) {
|
||||
//
|
||||
// In the middle or tail of the Date/Time op-code set, go left.
|
||||
//
|
||||
ASSERT(NewPos != NULL);
|
||||
NewPos = NewPos->ForwardLink;
|
||||
}
|
||||
}
|
||||
@@ -2771,6 +2797,7 @@ UiDisplayMenu (
|
||||
|
||||
SavedListEntry = TopOfScreen;
|
||||
|
||||
ASSERT(NewPos != NULL);
|
||||
if (NewPos->BackLink != &gMenuOption) {
|
||||
NewLine = TRUE;
|
||||
//
|
||||
@@ -2800,6 +2827,7 @@ UiDisplayMenu (
|
||||
// Check the previous menu entry to see if it was a zero-length advance. If it was,
|
||||
// don't worry about a redraw.
|
||||
//
|
||||
ASSERT(MenuOption != NULL);
|
||||
if ((INTN) MenuOption->Row - (INTN) DistanceValue < (INTN) TopRow) {
|
||||
Repaint = TRUE;
|
||||
TopOfScreen = NewPos;
|
||||
@@ -2857,6 +2885,7 @@ UiDisplayMenu (
|
||||
case CfUiPageUp:
|
||||
ControlFlag = CfCheckSelection;
|
||||
|
||||
ASSERT(NewPos != NULL);
|
||||
if (NewPos->BackLink == &gMenuOption) {
|
||||
NewLine = FALSE;
|
||||
Repaint = FALSE;
|
||||
@@ -3115,6 +3144,7 @@ UiDisplayMenu (
|
||||
Status = SubmitForm (Selection->FormSet, Selection->Form);
|
||||
|
||||
if (!EFI_ERROR (Status)) {
|
||||
ASSERT(MenuOption != NULL);
|
||||
UpdateStatusBar (INPUT_ERROR, MenuOption->ThisTag->QuestionFlags, FALSE);
|
||||
UpdateStatusBar (NV_UPDATE_REQUIRED, MenuOption->ThisTag->QuestionFlags, FALSE);
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user