summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal/SetupBrowserDxe
diff options
context:
space:
mode:
authorydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>2010-09-15 07:48:11 +0000
committerydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>2010-09-15 07:48:11 +0000
commitc9325700d0ef25eaf45077928af3f93b15ac5fe0 (patch)
treec46ae68c26db3a5a6a9e58b37b53265aa2f770d3 /MdeModulePkg/Universal/SetupBrowserDxe
parentf6b4e53dfe43c27d448cedb57059e5b7ca236dd8 (diff)
downloadedk2-platforms-c9325700d0ef25eaf45077928af3f93b15ac5fe0.tar.xz
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
Diffstat (limited to 'MdeModulePkg/Universal/SetupBrowserDxe')
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c4
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/Ui.c30
2 files changed, 32 insertions, 2 deletions
diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c b/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c
index 4c8aad1c8c..b124b72088 100644
--- a/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c
+++ b/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c
@@ -1063,11 +1063,11 @@ ParseOpCodes (
break;
case EFI_IFR_TYPE_DATE:
- ExpressionOpCode->ValueWidth = sizeof (EFI_IFR_DATE);
+ ExpressionOpCode->ValueWidth = (UINT8) sizeof (EFI_IFR_DATE);
break;
case EFI_IFR_TYPE_TIME:
- ExpressionOpCode->ValueWidth = sizeof (EFI_IFR_TIME);
+ ExpressionOpCode->ValueWidth = (UINT8) sizeof (EFI_IFR_TIME);
break;
case EFI_IFR_TYPE_OTHER:
diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c b/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c
index 0d3c1ebce8..d916aeb8cf 100644
--- a/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c
+++ b/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c
@@ -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 {