Reviewed-by: Qiu Shumin <shumin....@intel.com>

-----Original Message-----
From: Bi, Dandan 
Sent: Tuesday, August 11, 2015 11:07 AM
To: Dong, Eric; Qiu, Shumin; edk2-devel@lists.01.org
Subject: [patch] MdeModulePkg:Use safe string functions in UiApp.

Replace the unsafe string  functions with the safe one in UiApp.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <dandan...@intel.com>
---
 .../Application/UiApp/BootMaint/BootOption.c       | 30 ++++++++++------------
 .../Application/UiApp/BootMaint/FormGuid.h         |  2 +-
 .../Application/UiApp/BootMaint/UpdatePage.c       |  2 +-
 .../Application/UiApp/BootMaint/Variable.c         |  4 +--
 .../Application/UiApp/BootMngr/BootManager.c       |  6 +++--
 .../Application/UiApp/DeviceMngr/DeviceManager.c   |  2 +-
 MdeModulePkg/Application/UiApp/FrontPage.c         | 13 +++++-----
 7 files changed, 30 insertions(+), 29 deletions(-)

diff --git a/MdeModulePkg/Application/UiApp/BootMaint/BootOption.c 
b/MdeModulePkg/Application/UiApp/BootMaint/BootOption.c
index fa88f63..5213e3c 100644
--- a/MdeModulePkg/Application/UiApp/BootMaint/BootOption.c
+++ b/MdeModulePkg/Application/UiApp/BootMaint/BootOption.c
@@ -784,11 +784,11 @@ BOpt_GetBootOptions (
     
     StringSize = StrSize((UINT16*)LoadOptionPtr);
 
     NewLoadContext->Description = AllocateZeroPool 
(StrSize((UINT16*)LoadOptionPtr));
     ASSERT (NewLoadContext->Description != NULL);
-    StrCpy (NewLoadContext->Description, (UINT16*)LoadOptionPtr);
+    StrCpyS (NewLoadContext->Description, 
+ StrSize((UINT16*)LoadOptionPtr) / sizeof (UINT16), 
+ (UINT16*)LoadOptionPtr);
     
     ASSERT (NewLoadContext->Description != NULL);
     NewMenuEntry->DisplayString = NewLoadContext->Description;
 
     LoadOptionPtr += StringSize;
@@ -860,31 +860,29 @@ CHAR16 *
 BOpt_AppendFileName (
   IN  CHAR16  *Str1,
   IN  CHAR16  *Str2
   )
 {
-  UINTN   Size1;
-  UINTN   Size2;
+  UINTN   DestMax;
   CHAR16  *Str;
   CHAR16  *TmpStr;
   CHAR16  *Ptr;
   CHAR16  *LastSlash;
 
-  Size1 = StrSize (Str1);
-  Size2 = StrSize (Str2);
-  Str   = AllocateZeroPool (Size1 + Size2 + sizeof (CHAR16));
+  DestMax = (StrSize (Str1) + StrSize (Str2) + sizeof (CHAR16)) / sizeof 
(CHAR16);
+  Str   = AllocateZeroPool (DestMax * sizeof (CHAR16));
   ASSERT (Str != NULL);
 
-  TmpStr = AllocateZeroPool (Size1 + Size2 + sizeof (CHAR16)); 
+  TmpStr = AllocateZeroPool (DestMax * sizeof (CHAR16));
   ASSERT (TmpStr != NULL);
 
-  StrCat (Str, Str1);
+  StrCatS (Str, DestMax, Str1);
   if (!((*Str == '\\') && (*(Str + 1) == 0))) {
-    StrCat (Str, L"\\");
+    StrCatS (Str, DestMax, L"\\");
   }
 
-  StrCat (Str, Str2);
+  StrCatS (Str, DestMax, Str2);
 
   Ptr       = Str;
   LastSlash = Str;
   while (*Ptr != 0) {
     if (*Ptr == '\\' && *(Ptr + 1) == '.' && *(Ptr + 2) == '.' && *(Ptr + 3) 
== L'\\') { @@ -893,27 +891,27 @@ BOpt_AppendFileName (
       // DO NOT convert the .. if it is at the end of the string. This will
       // break the .. behavior in changing directories.
       //
 
       //
-      // Use TmpStr as a backup, as StrCpy in BaseLib does not handle copy of 
two strings 
+      // Use TmpStr as a backup, as StrCpyS in BaseLib does not handle 
+ copy of two strings
       // that overlap.
       //
-      StrCpy (TmpStr, Ptr + 3);
-      StrCpy (LastSlash, TmpStr);
+      StrCpyS (TmpStr, DestMax, Ptr + 3);
+      StrCpyS (LastSlash, DestMax - (UINTN) (LastSlash - Str), TmpStr);
       Ptr = LastSlash;
     } else if (*Ptr == '\\' && *(Ptr + 1) == '.' && *(Ptr + 2) == '\\') {
       //
       // Convert a "\.\" to a "\"
       //
 
       //
-      // Use TmpStr as a backup, as StrCpy in BaseLib does not handle copy of 
two strings 
+      // Use TmpStr as a backup, as StrCpyS in BaseLib does not handle 
+ copy of two strings
       // that overlap.
       //
-      StrCpy (TmpStr, Ptr + 2);
-      StrCpy (Ptr, TmpStr);
+      StrCpyS (TmpStr, DestMax, Ptr + 2);
+      StrCpyS (Ptr, DestMax - (UINTN) (Ptr - Str), TmpStr);
       Ptr = LastSlash;
     } else if (*Ptr == '\\') {
       LastSlash = Ptr;
     }
 
diff --git a/MdeModulePkg/Application/UiApp/BootMaint/FormGuid.h 
b/MdeModulePkg/Application/UiApp/BootMaint/FormGuid.h
index c80d792..ab3d9c9 100644
--- a/MdeModulePkg/Application/UiApp/BootMaint/FormGuid.h
+++ b/MdeModulePkg/Application/UiApp/BootMaint/FormGuid.h
@@ -193,11 +193,11 @@ typedef struct {
 
 ///
 /// This is the data structure used by File Explorer formset  ///  typedef 
struct {
-  UINT16  DescriptionData[75];
+  UINT16  DescriptionData[MAX_MENU_NUMBER];
   UINT16  OptionalData[127];
   UINT8   Active;
   UINT8   ForceReconnect;
 } FILE_EXPLORER_NV_DATA;
 
diff --git a/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c 
b/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c
index d85f2ea..0e85a83 100644
--- a/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c
+++ b/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c
@@ -836,11 +836,11 @@ UpdateConModePage (
     //
     // Build mode string Column x Row
     //
     UnicodeValueToString (ModeString, 0, Col, 0);
     PStr = &ModeString[0];
-    StrnCat (PStr, L" x ", StrLen(L" x ") + 1);
+    StrnCatS (PStr, sizeof (ModeString) / sizeof (ModeString[0]), L" x 
+ ", StrLen(L" x ") + 1);
     PStr = PStr + StrLen (PStr);
     UnicodeValueToString (PStr , 0, Row, 0);
 
     ModeToken[Index] = HiiSetString (CallbackData->BmmHiiHandle, 0, 
ModeString, NULL);
 
diff --git a/MdeModulePkg/Application/UiApp/BootMaint/Variable.c 
b/MdeModulePkg/Application/UiApp/BootMaint/Variable.c
index 5e5592f..4fe8c53 100644
--- a/MdeModulePkg/Application/UiApp/BootMaint/Variable.c
+++ b/MdeModulePkg/Application/UiApp/BootMaint/Variable.c
@@ -557,11 +557,11 @@ Var_UpdateDriverOption (
     L"Driver%04x",
     Index
     );
 
   if (*DescriptionData == 0x0000) {
-    StrCpy (DescriptionData, DriverString);
+    StrCpyS (DescriptionData, MAX_MENU_NUMBER, DriverString);
   }
 
   BufferSize = sizeof (UINT32) + sizeof (UINT16) + StrSize (DescriptionData);
   BufferSize += GetDevicePathSize (CallbackData->LoadContext->FilePathList);
 
@@ -725,11 +725,11 @@ Var_UpdateBootOption (
 
   Index = BOpt_GetBootOptionNumber () ;
   UnicodeSPrint (BootString, sizeof (BootString), L"Boot%04x", Index);
 
   if (NvRamMap->DescriptionData[0] == 0x0000) {
-    StrCpy (NvRamMap->DescriptionData, BootString);
+    StrCpyS (NvRamMap->DescriptionData, sizeof 
+ (NvRamMap->DescriptionData) / sizeof (NvRamMap->DescriptionData[0]), 
+ BootString);
   }
 
   BufferSize = sizeof (UINT32) + sizeof (UINT16) + StrSize 
(NvRamMap->DescriptionData);
   BufferSize += GetDevicePathSize (CallbackData->LoadContext->FilePathList);
 
diff --git a/MdeModulePkg/Application/UiApp/BootMngr/BootManager.c 
b/MdeModulePkg/Application/UiApp/BootMngr/BootManager.c
index fa35ad4..986413c 100644
--- a/MdeModulePkg/Application/UiApp/BootMngr/BootManager.c
+++ b/MdeModulePkg/Application/UiApp/BootMngr/BootManager.c
@@ -234,10 +234,11 @@ EnumerateBootOptions  (
   EFI_IFR_GUID_LABEL            *EndLabel;
   UINT16                        DeviceType;
   BOOLEAN                       IsLegacyOption;
   BOOLEAN                       NeedEndOp;
   UINT16                        KeyInput;
+  UINTN                         DestMax;
 
   DeviceType = (UINT16) -1;
 
   //
   // for better user experience
@@ -323,14 +324,15 @@ EnumerateBootOptions  (
     
     Token = HiiSetString (HiiHandle, 0, BootOption[Index].Description, NULL);
 
     TempStr = UiDevicePathToStr (BootOption[Index].FilePath);
     TempSize = StrSize (TempStr);
+    DestMax = (TempSize + StrSize (L"Device Path : ")) / 
+ sizeof(CHAR16);
     HelpString = AllocateZeroPool (TempSize + StrSize (L"Device Path : "));
     ASSERT (HelpString != NULL);
-    StrCat (HelpString, L"Device Path : ");
-    StrCat (HelpString, TempStr);
+    StrCatS (HelpString, DestMax, L"Device Path : ");
+    StrCatS (HelpString, DestMax, TempStr);
 
     HelpToken = HiiSetString (HiiHandle, 0, HelpString, NULL);
 
     HiiCreateActionOpCode (
       StartOpCodeHandle,
diff --git a/MdeModulePkg/Application/UiApp/DeviceMngr/DeviceManager.c 
b/MdeModulePkg/Application/UiApp/DeviceMngr/DeviceManager.c
index 0256500..3fcc4c9 100644
--- a/MdeModulePkg/Application/UiApp/DeviceMngr/DeviceManager.c
+++ b/MdeModulePkg/Application/UiApp/DeviceMngr/DeviceManager.c
@@ -170,11 +170,11 @@ GetMacAddressString(
   if (String == NULL) {
     return FALSE;
   }
 
   *PBuffer = String;
-  StrCpy(String, L"MAC:");
+  StrCpyS(String, BufferLen / sizeof (CHAR16), L"MAC:");
   String += 4;
   
   //
   // Convert the MAC address into a unicode string.
   //
diff --git a/MdeModulePkg/Application/UiApp/FrontPage.c 
b/MdeModulePkg/Application/UiApp/FrontPage.c
index d8fd4f9..b0bdf26 100644
--- a/MdeModulePkg/Application/UiApp/FrontPage.c
+++ b/MdeModulePkg/Application/UiApp/FrontPage.c
@@ -643,27 +643,28 @@ ConvertProcessorToString (
   OUT CHAR16                               **String
   )
 {
   CHAR16  *StringBuffer;
   UINTN   Index;
+  UINTN   DestMax;
   UINT32  FreqMhz;
 
   if (Base10Exponent >= 6) {
     FreqMhz = ProcessorFrequency;
     for (Index = 0; Index < (UINTN) (Base10Exponent - 6); Index++) {
       FreqMhz *= 10;
     }
   } else {
     FreqMhz = 0;
   }
-
+  DestMax = 0x20 / sizeof (CHAR16);
   StringBuffer = AllocateZeroPool (0x20);
   ASSERT (StringBuffer != NULL);
   Index = UnicodeValueToString (StringBuffer, LEFT_JUSTIFY, FreqMhz / 1000, 3);
-  StrCat (StringBuffer, L".");
+  StrCatS (StringBuffer, DestMax, L".");
   UnicodeValueToString (StringBuffer + Index + 1, PREFIX_ZERO, (FreqMhz % 
1000) / 10, 2);
-  StrCat (StringBuffer, L" GHz");
+  StrCatS (StringBuffer, DestMax, L" GHz");
   *String = (CHAR16 *) StringBuffer;
   return ;
 }
 
 
@@ -683,11 +684,11 @@ ConvertMemorySizeToString (
   CHAR16  *StringBuffer;
 
   StringBuffer = AllocateZeroPool (0x24);
   ASSERT (StringBuffer != NULL);
   UnicodeValueToString (StringBuffer, LEFT_JUSTIFY, MemorySize, 10);
-  StrCat (StringBuffer, L" MB RAM");
+  StrCatS (StringBuffer, 0x24 / sizeof (CHAR16), L" MB RAM");
 
   *String = (CHAR16 *) StringBuffer;
 
   return ;
 }
@@ -1540,12 +1541,12 @@ SetupResetReminder (
 
       StringBuffer1 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));
       ASSERT (StringBuffer1 != NULL);
       StringBuffer2 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));
       ASSERT (StringBuffer2 != NULL);
-      StrCpy (StringBuffer1, L"Configuration changed. Reset to apply it Now.");
-      StrCpy (StringBuffer2, L"Press ENTER to reset");
+      StrCpyS (StringBuffer1, MAX_STRING_LEN, L"Configuration changed. Reset 
to apply it Now.");
+      StrCpyS (StringBuffer2, MAX_STRING_LEN, L"Press ENTER to reset");
       //
       // Popup a menu to notice user
       //
       do {
         CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, StringBuffer1, 
StringBuffer2, NULL);
--
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to