]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c
1. Support inconsistent if opcode used in string/password opcode.
[mirror_edk2.git] / MdeModulePkg / Universal / SetupBrowserDxe / IfrParse.c
index 4c8aad1c8c36954e29dbc930aaefcd545b98bda7..314f91b529bb1225677d8e94c5946fa0b8dfbe32 100644 (file)
@@ -542,11 +542,13 @@ DestroyStorage (
 /**\r
   Free resources of a Statement.\r
 \r
+  @param  FormSet                Pointer of the FormSet\r
   @param  Statement              Pointer of the Statement\r
 \r
 **/\r
 VOID\r
 DestroyStatement (\r
+  IN     FORM_BROWSER_FORMSET    *FormSet,\r
   IN OUT FORM_BROWSER_STATEMENT  *Statement\r
   )\r
 {\r
@@ -608,18 +610,23 @@ DestroyStatement (
   if (Statement->BufferValue != NULL) {\r
     FreePool (Statement->BufferValue);\r
   }\r
+  if (Statement->Operand == EFI_IFR_STRING_OP || Statement->Operand == EFI_IFR_PASSWORD_OP) {\r
+    DeleteString(Statement->HiiValue.Value.string, FormSet->HiiHandle);\r
+  }\r
 }\r
 \r
 \r
 /**\r
   Free resources of a Form.\r
 \r
+  @param  FormSet                Pointer of the FormSet\r
   @param  Form                   Pointer of the Form.\r
 \r
 **/\r
 VOID\r
 DestroyForm (\r
-  IN OUT FORM_BROWSER_FORM  *Form\r
+  IN     FORM_BROWSER_FORMSET  *FormSet,\r
+  IN OUT FORM_BROWSER_FORM     *Form\r
   )\r
 {\r
   LIST_ENTRY              *Link;\r
@@ -645,7 +652,7 @@ DestroyForm (
     Statement = FORM_BROWSER_STATEMENT_FROM_LINK (Link);\r
     RemoveEntryList (&Statement->Link);\r
 \r
-    DestroyStatement (Statement);\r
+    DestroyStatement (FormSet, Statement);\r
   }\r
 \r
   //\r
@@ -731,7 +738,7 @@ DestroyFormSet (
       Form = FORM_BROWSER_FORM_FROM_LINK (Link);\r
       RemoveEntryList (&Form->Link);\r
 \r
-      DestroyForm (Form);\r
+      DestroyForm (FormSet, Form);\r
     }\r
   }\r
 \r
@@ -1063,11 +1070,11 @@ ParseOpCodes (
           break;\r
 \r
         case EFI_IFR_TYPE_DATE:\r
-          ExpressionOpCode->ValueWidth = sizeof (EFI_IFR_DATE);\r
+          ExpressionOpCode->ValueWidth = (UINT8) sizeof (EFI_IFR_DATE);\r
           break;\r
 \r
         case EFI_IFR_TYPE_TIME:\r
-          ExpressionOpCode->ValueWidth = sizeof (EFI_IFR_TIME);\r
+          ExpressionOpCode->ValueWidth = (UINT8) sizeof (EFI_IFR_TIME);\r
           break;\r
 \r
         case EFI_IFR_TYPE_OTHER:\r
@@ -1499,7 +1506,7 @@ ParseOpCodes (
         CurrentStatement->Minimum = ((EFI_IFR_NUMERIC *) OpCodeData)->data.u8.MinValue;\r
         CurrentStatement->Maximum = ((EFI_IFR_NUMERIC *) OpCodeData)->data.u8.MaxValue;\r
         CurrentStatement->Step    = ((EFI_IFR_NUMERIC *) OpCodeData)->data.u8.Step;\r
-        CurrentStatement->StorageWidth = sizeof (UINT8);\r
+        CurrentStatement->StorageWidth = (UINT16) sizeof (UINT8);\r
         Value->Type = EFI_IFR_TYPE_NUM_SIZE_8;\r
         break;\r
 \r
@@ -1507,7 +1514,7 @@ ParseOpCodes (
         CopyMem (&CurrentStatement->Minimum, &((EFI_IFR_NUMERIC *) OpCodeData)->data.u16.MinValue, sizeof (UINT16));\r
         CopyMem (&CurrentStatement->Maximum, &((EFI_IFR_NUMERIC *) OpCodeData)->data.u16.MaxValue, sizeof (UINT16));\r
         CopyMem (&CurrentStatement->Step,    &((EFI_IFR_NUMERIC *) OpCodeData)->data.u16.Step,     sizeof (UINT16));\r
-        CurrentStatement->StorageWidth = sizeof (UINT16);\r
+        CurrentStatement->StorageWidth = (UINT16) sizeof (UINT16);\r
         Value->Type = EFI_IFR_TYPE_NUM_SIZE_16;\r
         break;\r
 \r
@@ -1515,7 +1522,7 @@ ParseOpCodes (
         CopyMem (&CurrentStatement->Minimum, &((EFI_IFR_NUMERIC *) OpCodeData)->data.u32.MinValue, sizeof (UINT32));\r
         CopyMem (&CurrentStatement->Maximum, &((EFI_IFR_NUMERIC *) OpCodeData)->data.u32.MaxValue, sizeof (UINT32));\r
         CopyMem (&CurrentStatement->Step,    &((EFI_IFR_NUMERIC *) OpCodeData)->data.u32.Step,     sizeof (UINT32));\r
-        CurrentStatement->StorageWidth = sizeof (UINT32);\r
+        CurrentStatement->StorageWidth = (UINT16) sizeof (UINT32);\r
         Value->Type = EFI_IFR_TYPE_NUM_SIZE_32;\r
         break;\r
 \r
@@ -1523,7 +1530,7 @@ ParseOpCodes (
         CopyMem (&CurrentStatement->Minimum, &((EFI_IFR_NUMERIC *) OpCodeData)->data.u64.MinValue, sizeof (UINT64));\r
         CopyMem (&CurrentStatement->Maximum, &((EFI_IFR_NUMERIC *) OpCodeData)->data.u64.MaxValue, sizeof (UINT64));\r
         CopyMem (&CurrentStatement->Step,    &((EFI_IFR_NUMERIC *) OpCodeData)->data.u64.Step,     sizeof (UINT64));\r
-        CurrentStatement->StorageWidth = sizeof (UINT64);\r
+        CurrentStatement->StorageWidth = (UINT16) sizeof (UINT64);\r
         Value->Type = EFI_IFR_TYPE_NUM_SIZE_64;\r
         break;\r
 \r
@@ -1558,7 +1565,7 @@ ParseOpCodes (
       ASSERT(CurrentStatement != NULL);\r
 \r
       CurrentStatement->Flags = ((EFI_IFR_CHECKBOX *) OpCodeData)->Flags;\r
-      CurrentStatement->StorageWidth = sizeof (BOOLEAN);\r
+      CurrentStatement->StorageWidth = (UINT16) sizeof (BOOLEAN);\r
       CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_BOOLEAN;\r
 \r
       InitializeRequestElement (FormSet, CurrentStatement);\r
@@ -1580,6 +1587,7 @@ ParseOpCodes (
 \r
       CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_STRING;\r
       CurrentStatement->BufferValue = AllocateZeroPool (CurrentStatement->StorageWidth + sizeof (CHAR16));\r
+      CurrentStatement->HiiValue.Value.string = NewString ((CHAR16*) CurrentStatement->BufferValue, FormSet->HiiHandle);\r
 \r
       InitializeRequestElement (FormSet, CurrentStatement);\r
       break;\r
@@ -1598,6 +1606,7 @@ ParseOpCodes (
 \r
       CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_STRING;\r
       CurrentStatement->BufferValue = AllocateZeroPool ((CurrentStatement->StorageWidth + sizeof (CHAR16)));\r
+      CurrentStatement->HiiValue.Value.string = NewString ((CHAR16*) CurrentStatement->BufferValue, FormSet->HiiHandle);\r
 \r
       InitializeRequestElement (FormSet, CurrentStatement);\r
       break;\r
@@ -1610,7 +1619,7 @@ ParseOpCodes (
       CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_DATE;\r
 \r
       if ((CurrentStatement->Flags & EFI_QF_DATE_STORAGE) == QF_DATE_STORAGE_NORMAL) {\r
-        CurrentStatement->StorageWidth = sizeof (EFI_HII_DATE);\r
+        CurrentStatement->StorageWidth = (UINT16) sizeof (EFI_HII_DATE);\r
 \r
         InitializeRequestElement (FormSet, CurrentStatement);\r
       } else {\r
@@ -1630,7 +1639,7 @@ ParseOpCodes (
       CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_TIME;\r
 \r
       if ((CurrentStatement->Flags & QF_TIME_STORAGE) == QF_TIME_STORAGE_NORMAL) {\r
-        CurrentStatement->StorageWidth = sizeof (EFI_IFR_TIME);\r
+        CurrentStatement->StorageWidth = (UINT16) sizeof (EFI_IFR_TIME);\r
 \r
         InitializeRequestElement (FormSet, CurrentStatement);\r
       } else {\r