]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
BaseTools:To generate string default type correctly in VfrCompiler
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / ConfigRouting.c
index 5fb83afa92b6ba4e8b11010452c5b77b0cade6d6..56868831a19e9203e72f1d4945d01fd459d9223e 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
 Implementation of interfaces function for EFI_HII_CONFIG_ROUTING_PROTOCOL.\r
 \r
-Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -252,8 +252,7 @@ GenerateSubStr (
   Str    = AllocateZeroPool (Length * sizeof (CHAR16));\r
   ASSERT (Str != NULL);\r
 \r
-  StrCpy (Str, String);\r
-  Length = (BufferLen * 2 + 1) * sizeof (CHAR16);\r
+  StrCpyS (Str, Length, String);\r
 \r
   StringHeader = Str + StrLen (String);\r
   TemString    = (CHAR16 *) StringHeader;\r
@@ -297,7 +296,7 @@ GenerateSubStr (
   //\r
   // Convert the uppercase to lowercase since <HexAf> is defined in lowercase format.\r
   //\r
-  StrCat (Str, L"&");  \r
+  StrCatS (Str, Length, L"&");  \r
   HiiToLower (Str);\r
 \r
   *SubStr = Str;\r
@@ -392,6 +391,7 @@ AppendToMultiString (
 {\r
   UINTN AppendStringSize;\r
   UINTN MultiStringSize;\r
+  UINTN MaxLen;\r
 \r
   if (MultiString == NULL || *MultiString == NULL || AppendString == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -399,6 +399,7 @@ AppendToMultiString (
 \r
   AppendStringSize = StrSize (AppendString);\r
   MultiStringSize  = StrSize (*MultiString);\r
+  MaxLen = MAX_STRING_LENGTH / sizeof (CHAR16);\r
 \r
   //\r
   // Enlarge the buffer each time when length exceeds MAX_STRING_LENGTH.\r
@@ -410,12 +411,13 @@ AppendToMultiString (
                                   MultiStringSize + AppendStringSize,\r
                                   (VOID *) (*MultiString)\r
                                   );\r
+    MaxLen = (MultiStringSize + AppendStringSize) / sizeof (CHAR16);\r
     ASSERT (*MultiString != NULL);\r
   }\r
   //\r
   // Append the incoming string\r
   //\r
-  StrCat (*MultiString, AppendString);\r
+  StrCatS (*MultiString, MaxLen, AppendString);\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -536,6 +538,8 @@ MergeDefaultString (
   EFI_STRING   AltConfigHdr;\r
   UINTN        HeaderLength;\r
   UINTN        SizeAltCfgResp;\r
+  UINTN        MaxLen;\r
+  UINTN        TotalSize;\r
   \r
   if (*AltCfgResp == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -572,13 +576,14 @@ MergeDefaultString (
   // Construct AltConfigHdr string  "&<ConfigHdr>&ALTCFG=XXXX\0"\r
   //                                  |1| StrLen (ConfigHdr) | 8 | 4 | 1 |\r
   //\r
-  AltConfigHdr = AllocateZeroPool ((1 + HeaderLength + 8 + 4 + 1) * sizeof (CHAR16));\r
+  MaxLen = 1 + HeaderLength + 8 + 4 + 1;\r
+  AltConfigHdr = AllocateZeroPool (MaxLen * sizeof (CHAR16));\r
   if (AltConfigHdr == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
-  StrCpy (AltConfigHdr, L"&");\r
-  StrnCat (AltConfigHdr, *AltCfgResp, HeaderLength);\r
-  StrCat (AltConfigHdr, L"&ALTCFG=");\r
+  StrCpyS (AltConfigHdr, MaxLen, L"&");\r
+  StrnCatS (AltConfigHdr, MaxLen, *AltCfgResp, HeaderLength);\r
+  StrCatS (AltConfigHdr, MaxLen, L"&ALTCFG=");\r
   HeaderLength = StrLen (AltConfigHdr);\r
   \r
   StringPtrDefault = StrStr (DefaultAltCfgResp, AltConfigHdr);\r
@@ -586,7 +591,7 @@ MergeDefaultString (
     //\r
     // Get AltCfg Name\r
     //\r
-    StrnCat (AltConfigHdr, StringPtrDefault + HeaderLength, 4);\r
+    StrnCatS (AltConfigHdr, MaxLen, StringPtrDefault + HeaderLength, 4);\r
     StringPtr = StrStr (*AltCfgResp, AltConfigHdr); \r
     \r
     //\r
@@ -595,34 +600,35 @@ MergeDefaultString (
     if (StringPtr == NULL) {\r
       StringPtrEnd   = StrStr (StringPtrDefault + 1, L"&GUID");\r
       SizeAltCfgResp = StrSize (*AltCfgResp);\r
+      TotalSize = SizeAltCfgResp + StrSize (StringPtrDefault);\r
       if (StringPtrEnd == NULL) {\r
         //\r
         // No more default string is found.\r
         //\r
         *AltCfgResp    = (EFI_STRING) ReallocatePool (\r
                                      SizeAltCfgResp,\r
-                                     SizeAltCfgResp + StrSize (StringPtrDefault),\r
+                                     TotalSize,\r
                                      (VOID *) (*AltCfgResp)\r
                                      );\r
         if (*AltCfgResp == NULL) {\r
           FreePool (AltConfigHdr);\r
           return EFI_OUT_OF_RESOURCES;\r
         }\r
-        StrCat (*AltCfgResp, StringPtrDefault);\r
+        StrCatS (*AltCfgResp, TotalSize / sizeof (CHAR16), StringPtrDefault);\r
         break;\r
       } else {\r
         TempChar = *StringPtrEnd;\r
         *StringPtrEnd = L'\0';\r
         *AltCfgResp = (EFI_STRING) ReallocatePool (\r
                                      SizeAltCfgResp,\r
-                                     SizeAltCfgResp + StrSize (StringPtrDefault),\r
+                                     TotalSize,\r
                                      (VOID *) (*AltCfgResp)\r
                                      );\r
         if (*AltCfgResp == NULL) {\r
           FreePool (AltConfigHdr);\r
           return EFI_OUT_OF_RESOURCES;\r
         }\r
-        StrCat (*AltCfgResp, StringPtrDefault);\r
+        StrCatS (*AltCfgResp, TotalSize / sizeof (CHAR16), StringPtrDefault);\r
         *StringPtrEnd = TempChar;\r
       }\r
     }\r
@@ -1188,8 +1194,8 @@ GetVarStoreType (
         Status = EFI_OUT_OF_RESOURCES;\r
         goto Done;\r
       }\r
-      StrCpy (TempStr, GuidStr);\r
-      StrCat (TempStr, NameStr);\r
+      StrCpyS (TempStr, LengthString, GuidStr);\r
+      StrCatS (TempStr, LengthString, NameStr);\r
       if (ConfigHdr == NULL || StrnCmp (ConfigHdr, TempStr, StrLen (TempStr)) == 0) {\r
         *EfiVarStore = (EFI_IFR_VARSTORE_EFI *) AllocateZeroPool (IfrOpHdr->Length);\r
         if (*EfiVarStore == NULL) {\r
@@ -1304,8 +1310,8 @@ IsThisVarstore (
     goto Done;\r
   }\r
 \r
-  StrCpy (TempStr, GuidStr);\r
-  StrCat (TempStr, NameStr);\r
+  StrCpyS (TempStr, LengthString, GuidStr);\r
+  StrCatS (TempStr, LengthString, NameStr);\r
 \r
   if (ConfigHdr == NULL || StrnCmp (ConfigHdr, TempStr, StrLen (TempStr)) == 0) {\r
     RetVal = TRUE;\r
@@ -2329,6 +2335,8 @@ GetBlockElement (
   IFR_BLOCK_DATA       *NextBlockData;\r
   UINTN                Length;\r
 \r
+  TmpBuffer = NULL;\r
+\r
   //\r
   // Init RequestBlockArray\r
   //\r
@@ -2664,7 +2672,7 @@ GenerateConfigRequest (
   //\r
   // Start with <ConfigHdr>\r
   //\r
-  StrCpy (StringPtr, ConfigHdr);\r
+  StrCpyS (StringPtr, Length, ConfigHdr);\r
   StringPtr += StrLen (StringPtr);\r
 \r
   //\r
@@ -2763,12 +2771,12 @@ GenerateHdr (
     Status = EFI_OUT_OF_RESOURCES;\r
     goto Done;\r
   }\r
-  StrCpy (*ConfigHdr, GuidStr);\r
-  StrCat (*ConfigHdr, NameStr);\r
+  StrCpyS (*ConfigHdr, Length, GuidStr);\r
+  StrCatS (*ConfigHdr, Length, NameStr);\r
   if (VarStorageData->Name == NULL) {\r
-    StrCat (*ConfigHdr, L"&");\r
+    StrCatS (*ConfigHdr, Length, L"&");\r
   }\r
-  StrCat (*ConfigHdr, PathStr);\r
+  StrCatS (*ConfigHdr, Length, PathStr);\r
 \r
   //\r
   // Remove the last character L'&'\r
@@ -2932,7 +2940,7 @@ GenerateAltConfigResp (
   //\r
   // Start with <ConfigHdr>\r
   //\r
-  StrCpy (StringPtr, ConfigHdr);\r
+  StrCpyS (StringPtr, Length, ConfigHdr);\r
   StringPtr += StrLen (StringPtr);\r
 \r
   for (Link = DefaultIdArray->Entry.ForwardLink; Link != &DefaultIdArray->Entry; Link = Link->ForwardLink) {\r
@@ -3083,7 +3091,7 @@ GetFullStringFromHiiFormPackages (
 \r
   Status = GetFormPackageData (DataBaseRecord, &HiiFormPackage, &PackageSize);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -4339,6 +4347,7 @@ HiiConfigRoutingRouteConfig (
                                );\r
     }\r
     if (EFI_ERROR (Status)) {\r
+      ASSERT (AccessProgress != NULL);\r
       //\r
       // AccessProgress indicates the parsing progress on <ConfigResp>.\r
       // Map it to the progress on <MultiConfigResp> then return it.\r
@@ -4431,6 +4440,8 @@ HiiBlockToConfig (
   CHAR16                              *TemString;\r
   CHAR16                              TemChar;\r
 \r
+  TmpBuffer = NULL;\r
+\r
   if (This == NULL || Progress == NULL || Config == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
@@ -4607,8 +4618,8 @@ HiiBlockToConfig (
       *(ConfigElement + (StringPtr - TmpPtr)) = L'&';\r
     }\r
     *(ConfigElement + (StringPtr - TmpPtr) + 1) = 0;\r
-    StrCat (ConfigElement, L"VALUE=");\r
-    StrCat (ConfigElement, ValueStr);\r
+    StrCatS (ConfigElement, Length, L"VALUE=");\r
+    StrCatS (ConfigElement, Length, ValueStr);\r
 \r
     AppendToMultiString (Config, ConfigElement);\r
 \r
@@ -4727,6 +4738,8 @@ HiiConfigToBlock (
   UINTN                               BufferSize;\r
   UINTN                               MaxBlockSize;\r
 \r
+  TmpBuffer = NULL;\r
+\r
   if (This == NULL || BlockSize == NULL || Progress == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
@@ -5123,8 +5136,8 @@ Exit:
     if (*AltCfgResp == NULL) {\r
       Status = EFI_OUT_OF_RESOURCES;\r
     } else {\r
-      StrnCpy (*AltCfgResp, HdrStart, HdrEnd - HdrStart);\r
-      StrCat (*AltCfgResp, Result);\r
+      StrnCpyS (*AltCfgResp, Length, HdrStart, HdrEnd - HdrStart);\r
+      StrCatS (*AltCfgResp, Length, Result);\r
       Status = EFI_SUCCESS;\r
     }\r
   }\r