]> git.proxmox.com Git - mirror_edk2.git/commitdiff
K8:
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 20 Jan 2009 12:55:02 +0000 (12:55 +0000)
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 20 Jan 2009 12:55:02 +0000 (12:55 +0000)
1) Replace immediate constant with MACRO.
2) Add in ASSERT for NULL before dereferencing pointers and after memory allocation.
3) Add a return statement in ProcessOptions to handle the mismatch between the value stored and the opcode for one-of-option in orderedlist opcode. This case occurs when the one-of-optoin entry in OrderedList get deleted.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7320 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/SetupBrowserDxe/InputHandler.c
MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
MdeModulePkg/Universal/SetupBrowserDxe/ProcessOptions.c
MdeModulePkg/Universal/SetupBrowserDxe/Ui.h

index 90aa31143163108fc690352df39f80ab7ddbea61..d122aec56917eb0695bc1e88eeccb4dd04eae5db 100644 (file)
@@ -235,9 +235,9 @@ GetNumericInput (
   EFI_STATUS              Status;\r
   UINTN                   Column;\r
   UINTN                   Row;\r
-  CHAR16                  InputText[23];\r
-  CHAR16                  FormattedNumber[22];\r
-  UINT64                  PreviousNumber[20];\r
+  CHAR16                  InputText[MAX_NUMERIC_INPUT_WIDTH];\r
+  CHAR16                  FormattedNumber[MAX_NUMERIC_INPUT_WIDTH - 1];\r
+  UINT64                  PreviousNumber[MAX_NUMERIC_INPUT_WIDTH - 3];\r
   UINTN                   Count;\r
   UINTN                   Loop;\r
   BOOLEAN                 ManualInput;\r
@@ -387,6 +387,7 @@ GetNumericInput (
 \r
     InputText[0] = LEFT_NUMERIC_DELIMITER;\r
     SetUnicodeMem (InputText + 1, InputWidth, L' ');\r
+    ASSERT (InputWidth < MAX_NUMERIC_INPUT_WIDTH); \r
     InputText[InputWidth + 1] = RIGHT_NUMERIC_DELIMITER;\r
     InputText[InputWidth + 2] = L'\0';\r
 \r
@@ -640,6 +641,7 @@ EnterCarriageReturn:
 \r
         if (EditValue > Maximum) {\r
           UpdateStatusBar (INPUT_ERROR, Question->QuestionFlags, TRUE);\r
+          ASSERT (Count < sizeof (PreviousNumber) / sizeof (PreviousNumber[0]));\r
           EditValue = PreviousNumber[Count];\r
           break;\r
         } else {\r
@@ -970,6 +972,7 @@ TheKey:
         if (HighlightOptionIndex > 0) {\r
           HighlightOptionIndex--;\r
 \r
+          ASSERT (CurrentOption != NULL);\r
           SwapListEntries (CurrentOption->Link.BackLink, &CurrentOption->Link);\r
         }\r
       }\r
@@ -997,6 +1000,7 @@ TheKey:
         if (HighlightOptionIndex < (PopUpMenuLines - 1)) {\r
           HighlightOptionIndex++;\r
 \r
+          ASSERT (CurrentOption != NULL);\r
           SwapListEntries (&CurrentOption->Link, CurrentOption->Link.ForwardLink);\r
         }\r
       }\r
@@ -1096,6 +1100,7 @@ TheKey:
           Link = GetNextNode (&Question->OptionListHead, Link);\r
         }\r
       } else {\r
+        ASSERT (CurrentOption != NULL);\r
         CopyMem (&Question->HiiValue, &CurrentOption->Value, sizeof (EFI_HII_VALUE));\r
       }\r
 \r
index 956db889663b9befa05bbaa8ff33cdea0b056d67..adc0cf8384e57b917b29b9bc80634699993f19d8 100644 (file)
@@ -188,6 +188,8 @@ DisplayPageFrame (
   CHAR16                 *StrFrontPageBanner;\r
   UINTN                  Row;\r
   EFI_SCREEN_DESCRIPTOR  LocalScreen;\r
+  UINTN                  RowIdx;\r
+  UINTN                  ColumnIdx;\r
 \r
   ZeroMem (&LocalScreen, sizeof (EFI_SCREEN_DESCRIPTOR));\r
   gST->ConOut->QueryMode (gST->ConOut, gST->ConOut->Mode->Mode, &LocalScreen.RightColumn, &LocalScreen.BottomRow);\r
@@ -229,9 +231,15 @@ DisplayPageFrame (
            Alignment < BANNER_COLUMNS + (UINT8) LocalScreen.LeftColumn;\r
            Alignment++\r
           ) {\r
-        if (BannerData->Banner[Line - (UINT8) LocalScreen.TopRow][Alignment - (UINT8) LocalScreen.LeftColumn] != 0x0000) {\r
+        RowIdx = Line - (UINT8) LocalScreen.TopRow;\r
+        ColumnIdx = Alignment - (UINT8) LocalScreen.LeftColumn;\r
+\r
+        ASSERT (RowIdx < BANNER_HEIGHT);\r
+        ASSERT (ColumnIdx < BANNER_COLUMNS);\r
+        \r
+        if (BannerData->Banner[RowIdx][ColumnIdx] != 0x0000) {\r
           StrFrontPageBanner = GetToken (\r
-                                BannerData->Banner[Line - (UINT8) LocalScreen.TopRow][Alignment - (UINT8) LocalScreen.LeftColumn],\r
+                                BannerData->Banner[RowIdx][ColumnIdx],\r
                                 FrontPageHandle\r
                                 );\r
         } else {\r
index d72578ddfbfa52fb37b9bd13b9541802b25d1fc0..8ac531f09cfbc6333fc08948d3e869fa26d92551 100644 (file)
@@ -452,6 +452,7 @@ ProcessOptions (
 \r
         FreePool (*OptionString);\r
         *OptionString = NULL;\r
+        return EFI_NOT_FOUND;\r
       }\r
 \r
       if ((OneOfOption->SuppressExpression != NULL) &&\r
@@ -722,6 +723,8 @@ ProcessOptions (
           }\r
 \r
           TempString = AllocateCopyPool ((Maximum + 1) * sizeof (CHAR16), Question->BufferValue);\r
+          ASSERT (TempString != NULL);\r
+          \r
           TempString[Maximum] = L'\0';\r
 \r
           if (StrCmp (StringPtr, TempString) != 0) {\r
@@ -877,6 +880,7 @@ ProcessHelpString (
   //\r
   AllocateSize  = 0x20;\r
   IndexArray    = AllocatePool (AllocateSize * sizeof (UINTN) * 3);\r
+  ASSERT (IndexArray != NULL);\r
 \r
   if (*FormattedString != NULL) {\r
     FreePool (*FormattedString);\r
@@ -1012,6 +1016,7 @@ ProcessHelpString (
 \r
   VirtualLineCount = RowCount * (LineCount / RowCount + (LineCount % RowCount > 0));\r
   *FormattedString = AllocateZeroPool (VirtualLineCount * (BlockWidth + 1) * sizeof (CHAR16) * 2);\r
+  ASSERT (*FormattedString != NULL);\r
 \r
   for (CurrIndex = 0; CurrIndex < LineCount; CurrIndex ++) {\r
     *(*FormattedString + CurrIndex * 2 * (BlockWidth + 1)) = (CHAR16) ((IndexArray[CurrIndex*3+2] == 2) ? WIDE_CHAR : NARROW_CHAR);\r
index 0f27de5ed1b2e50adab60d882dbff05be5784569..7031c3973b23e8f6a3806f2dd3e789f0f0a65003 100644 (file)
@@ -26,6 +26,13 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #define SUBTITLE_INDENT  2\r
 \r
+\r
+//\r
+// It take 23 characters including the NULL to print a 64 bits number with "[" and "]".\r
+// pow(2, 64) = [18446744073709551616]\r
+//\r
+#define MAX_NUMERIC_INPUT_WIDTH 23\r
+\r
 typedef enum {\r
   UiNoOperation,\r
   UiDefault,\r