]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
MdeModulePkg:Use safe string functions
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / ConfigRouting.c
index 4caf361bd22272cc51c0a3de82e9305cd0ef5ee4..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
@@ -2666,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
@@ -2765,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
@@ -2934,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
@@ -4612,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
@@ -5130,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