Replace unsafe string functions with new added safe string functions.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo <lubo.zh...@intel.com>
---
 MdeModulePkg/Library/DxeNetLib/DxeNetLib.c              |  4 ++--
 MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfig.c   |  2 +-
 MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.c     |  2 +-
 .../Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c   |  2 +-
 MdeModulePkg/Universal/Network/IScsiDxe/IScsiMisc.c     |  2 +-
 .../Universal/Network/Ip4ConfigDxe/Ip4ConfigNv.c        |  4 ++--
 .../Universal/Network/Mtftp4Dxe/Mtftp4Support.c         | 13 ++++++++-----
 .../Universal/Network/UefiPxeBcDxe/PxeBcMtftp.c         | 17 +++++++++--------
 .../Universal/Network/UefiPxeBcDxe/PxeBcSupport.c       | 12 +++++++-----
 .../Universal/Network/UefiPxeBcDxe/PxeBcSupport.h       | 11 +++++++----
 .../Universal/Network/VlanConfigDxe/VlanConfigImpl.c    | 12 ++++++------
 11 files changed, 45 insertions(+), 36 deletions(-)

diff --git a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c 
b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c
index 467b822..cb5a8e6 100644
--- a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c
+++ b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c
@@ -2625,11 +2625,11 @@ NetLibDefaultAddressIsStatic (
   Len = StrLen (ConfigHdr);
   ConfigResp = AllocateZeroPool ((Len + NIC_ITEM_CONFIG_SIZE * 2 + 100) * 
sizeof (CHAR16));
   if (ConfigResp == NULL) {
     goto ON_EXIT;
   }
-  StrCpy (ConfigResp, ConfigHdr);
+  StrCpyS (ConfigResp, (Len + NIC_ITEM_CONFIG_SIZE * 2 + 100), ConfigHdr);
 
   String = ConfigResp + Len;
   UnicodeSPrint (
     String,
     (8 + 4 + 7 + 4 + 1) * sizeof (CHAR16),
@@ -3385,11 +3385,11 @@ NetLibIp6ToStr (
 
   if ((UINTN)Ptr - (UINTN)Buffer > StringSize) {
     return EFI_BUFFER_TOO_SMALL;
   }
 
-  StrCpy (String, Buffer);
+  StrCpyS (String, StringSize / 2, Buffer);
 
   return EFI_SUCCESS;
 }
 
 /**
diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfig.c 
b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfig.c
index e263f0e..75fe12f 100644
--- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfig.c
+++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfig.c
@@ -776,11 +776,11 @@ IScsiFormCallback (
       IScsiUnicodeStrToAsciiStr (IfrNvData->TargetName, IScsiName);
       Status = IScsiNormalizeName (IScsiName, AsciiStrLen (IScsiName));
       if (EFI_ERROR (Status)) {
         CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid 
iSCSI Name!", NULL);
       } else {
-        AsciiStrCpy (Private->Current->SessionConfigData.TargetName, 
IScsiName);
+        AsciiStrCpyS (Private->Current->SessionConfigData.TargetName, 
ISCSI_NAME_MAX_SIZE, IScsiName);
       }
 
       break;
 
     case KEY_DHCP_ENABLE:
diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.c 
b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.c
index 79e7093..10ef629 100644
--- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.c
+++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.c
@@ -156,11 +156,11 @@ IScsiDhcpExtractRootPath (
   Status = IScsiNormalizeName (Field->Str, AsciiStrLen (Field->Str));
   if (EFI_ERROR (Status)) {
     goto ON_EXIT;
   }
 
-  AsciiStrCpy (ConfigNvData->TargetName, Field->Str);
+  AsciiStrCpyS (ConfigNvData->TargetName, ISCSI_NAME_MAX_SIZE, Field->Str);
 
 ON_EXIT:
 
   FreePool (TmpStr);
 
diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c 
b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c
index da14105..e3576c1 100644
--- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c
+++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c
@@ -242,11 +242,11 @@ IScsiExtScsiPassThruBuildDevicePath (
     break;
   }
 
   CopyMem (&Node->Iscsi.Lun, ConfigNvData->BootLun, sizeof (UINT64));
   Node->Iscsi.TargetPortalGroupTag = Session->TargetPortalGroupTag;
-  AsciiStrCpy ((CHAR8 *) Node + sizeof (ISCSI_DEVICE_PATH), 
ConfigNvData->TargetName);
+  AsciiStrCpyS ((CHAR8 *) Node + sizeof (ISCSI_DEVICE_PATH), AsciiStrLen 
(ConfigNvData->TargetName) + 1, ConfigNvData->TargetName);
 
   *DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Node;
 
   return EFI_SUCCESS;
 }
diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiMisc.c 
b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiMisc.c
index 1cb1fb8..85a23a2 100644
--- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiMisc.c
+++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiMisc.c
@@ -202,11 +202,11 @@ IScsiLunToUnicodeStr (
   TempStr = Str;
 
   for (Index = 0; Index < 4; Index++) {
 
     if ((Lun[2 * Index] | Lun[2 * Index + 1]) == 0) {
-      StrCpy (TempStr, L"0-");
+      CopyMem(TempStr, L"0-", StrSize(L"0-"));
     } else {
       TempStr[0]  = (CHAR16) IScsiHexString[Lun[2 * Index] >> 4];
       TempStr[1]  = (CHAR16) IScsiHexString[Lun[2 * Index] & 0x0F];
       TempStr[2]  = (CHAR16) IScsiHexString[Lun[2 * Index + 1] >> 4];
       TempStr[3]  = (CHAR16) IScsiHexString[Lun[2 * Index + 1] & 0x0F];
diff --git a/MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigNv.c 
b/MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigNv.c
index 89e1dda..7be3e87 100644
--- a/MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigNv.c
+++ b/MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigNv.c
@@ -485,14 +485,14 @@ Ip4DeviceExtractConfig (
     Size = Size + 1;
     Size = Size + StrLen (FormResult) + 1;
     *Results = AllocateZeroPool (Size * sizeof (CHAR16));
     ASSERT (*Results != NULL);
     StrPointer  = *Results;
-    StrCpy (StrPointer, DeviceResult);
+    StrCpyS (StrPointer, Size, DeviceResult);
     StrPointer  = StrPointer + StrLen (StrPointer);
     *StrPointer = L'&';
-    StrCpy (StrPointer + 1, FormResult);
+    StrCpyS (StrPointer + 1, StrLen (FormResult) + 1, FormResult);
     FreePool (DeviceResult);
     FreePool (FormResult);
   } else if (HiiIsConfigHdrMatch (Request, &gEfiNicIp4ConfigVariableGuid, 
EFI_NIC_IP4_CONFIG_VARIABLE)) {
     *Results = DeviceResult;
   } else if (HiiIsConfigHdrMatch (Request, &gNicIp4ConfigNvDataGuid, 
EFI_NIC_IP4_CONFIG_VARIABLE)) {
diff --git a/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.c 
b/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.c
index df79c85..85bdf5a 100644
--- a/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.c
+++ b/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.c
@@ -317,21 +317,24 @@ Mtftp4SendRequest (
   Packet         = (EFI_MTFTP4_PACKET *) NetbufAllocSpace (Nbuf, Len, FALSE);
   ASSERT (Packet != NULL);
 
   Packet->OpCode = HTONS (Instance->Operation);
   Cur            = Packet->Rrq.Filename;
-  Cur            = (UINT8 *) AsciiStrCpy ((CHAR8 *) Cur, (CHAR8 *) 
Token->Filename);
+  Cur            = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len - 2, (CHAR8 *) 
Token->Filename);
   Cur           += AsciiStrLen ((CHAR8 *) Token->Filename) + 1;
-  Cur            = (UINT8 *) AsciiStrCpy ((CHAR8 *) Cur, (CHAR8 *) Mode);
+  Cur            = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len - (AsciiStrLen 
((CHAR8 *) Token->Filename) + 1), (CHAR8 *) Mode);
   Cur           += AsciiStrLen ((CHAR8 *) Mode) + 1;
+  Len -= ((UINT32) AsciiStrLen ((CHAR8 *) Token->Filename) + (UINT32) 
AsciiStrLen ((CHAR8 *) Mode) + 4);
 
   for (Index = 0; Index < Token->OptionCount; ++Index) {
-    Cur  = (UINT8 *) AsciiStrCpy ((CHAR8 *) Cur, (CHAR8 *) 
Options[Index].OptionStr);
+    Cur  = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len, (CHAR8 *) 
Options[Index].OptionStr);
     Cur += AsciiStrLen ((CHAR8 *) Options[Index].OptionStr) + 1;
+    Len -= (AsciiStrLen ((CHAR8 *) Options[Index].OptionStr) + 1);
 
-    Cur  = (UINT8 *) AsciiStrCpy ((CHAR8 *) Cur, (CHAR8 *) 
Options[Index].ValueStr);
+    Cur  = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len, (CHAR8 *) 
Options[Index].ValueStr);
     Cur += AsciiStrLen ((CHAR8 *) (CHAR8 *) Options[Index].ValueStr) + 1;
+    Len -= (AsciiStrLen ((CHAR8 *) (CHAR8 *) Options[Index].ValueStr) + 1);
   }
 
   return Mtftp4SendPacket (Instance, Nbuf);
 }
 
@@ -369,11 +372,11 @@ Mtftp4SendError (
   ASSERT (TftpError != NULL);
 
   TftpError->OpCode = HTONS (EFI_MTFTP4_OPCODE_ERROR);
   TftpError->Error.ErrorCode = HTONS (ErrCode);
 
-  AsciiStrCpy ((CHAR8 *) TftpError->Error.ErrorMessage, (CHAR8 *) ErrInfo);
+  AsciiStrCpyS ((CHAR8 *) TftpError->Error.ErrorMessage, Len, (CHAR8 *) 
ErrInfo);
 
   return Mtftp4SendPacket (Instance, Packet);
 }
 
 
diff --git a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcMtftp.c 
b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcMtftp.c
index aa73132..20747ed 100644
--- a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcMtftp.c
+++ b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcMtftp.c
@@ -58,11 +58,11 @@ PxeBcCheckPacket (
   Status    = EFI_SUCCESS;
 
   if (Packet->OpCode == EFI_MTFTP4_OPCODE_ERROR) {
     Private->Mode.TftpErrorReceived = TRUE;
     Private->Mode.TftpError.ErrorCode = (UINT8) Packet->Error.ErrorCode;
-    AsciiStrnCpy (Private->Mode.TftpError.ErrorString, (CHAR8 *) 
Packet->Error.ErrorMessage, PXE_MTFTP_ERROR_STRING_LENGTH);
+    AsciiStrnCpyS (Private->Mode.TftpError.ErrorString, 
PXE_MTFTP_ERROR_STRING_LENGTH, (CHAR8 *) Packet->Error.ErrorMessage, 
PXE_MTFTP_ERROR_STRING_LENGTH);
     Private->Mode.TftpError.ErrorString[PXE_MTFTP_ERROR_STRING_LENGTH - 1] = 
'\0';
   }
 
   if (Callback != NULL) {
 
@@ -133,17 +133,17 @@ PxeBcTftpGetFileSize (
 
     return Status;
   }
 
   ReqOpt[0].OptionStr = (UINT8*)mMtftpOptions[PXE_MTFTP_OPTION_TSIZE_INDEX];
-  UtoA10 (0, (CHAR8 *) OptBuf);
+  UtoA10 (0, (CHAR8 *) OptBuf, 128);
   ReqOpt[0].ValueStr = OptBuf;
 
   if (BlockSize != NULL) {
     ReqOpt[1].OptionStr = 
(UINT8*)mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
     ReqOpt[1].ValueStr  = ReqOpt[0].ValueStr + AsciiStrLen ((CHAR8 *) 
ReqOpt[0].ValueStr) + 1;
-    UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[1].ValueStr);
+    UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[1].ValueStr, 128 - (AsciiStrLen 
((CHAR8 *) ReqOpt[0].ValueStr) + 1));
     OptCnt++;
   }
 
   Status = Mtftp4->GetInfo (
                     Mtftp4,
@@ -158,12 +158,13 @@ PxeBcTftpGetFileSize (
 
   if (EFI_ERROR (Status)) {
     if (Status == EFI_TFTP_ERROR) {
       Private->Mode.TftpErrorReceived = TRUE;
       Private->Mode.TftpError.ErrorCode = (UINT8) Packet->Error.ErrorCode;
-      AsciiStrnCpy (
-        Private->Mode.TftpError.ErrorString, 
+      AsciiStrnCpyS (
+        Private->Mode.TftpError.ErrorString,
+        PXE_MTFTP_ERROR_STRING_LENGTH,
         (CHAR8 *) Packet->Error.ErrorMessage, 
         PXE_MTFTP_ERROR_STRING_LENGTH
         );
       Private->Mode.TftpError.ErrorString[PXE_MTFTP_ERROR_STRING_LENGTH - 1] = 
'\0';
     }
@@ -259,11 +260,11 @@ PxeBcTftpReadFile (
 
   if (BlockSize != NULL) {
 
     ReqOpt[0].OptionStr = (UINT8*) 
mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
     ReqOpt[0].ValueStr  = OptBuf;
-    UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[0].ValueStr);
+    UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[0].ValueStr, 128);
     OptCnt++;
   }
 
   Token.Event         = NULL;
   Token.OverrideData  = NULL;
@@ -342,11 +343,11 @@ PxeBcTftpWriteFile (
 
   if (BlockSize != NULL) {
 
     ReqOpt[0].OptionStr = (UINT8*) 
mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
     ReqOpt[0].ValueStr  = OptBuf;
-    UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[0].ValueStr);
+    UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[0].ValueStr, 128);
     OptCnt++;
   }
 
   Token.Event           = NULL;
   Token.OverrideData    = NULL;
@@ -416,11 +417,11 @@ PxeBcTftpReadDirectory (
 
   if (BlockSize != NULL) {
 
     ReqOpt[0].OptionStr = (UINT8*) 
mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
     ReqOpt[0].ValueStr  = OptBuf;
-    UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[0].ValueStr);
+    UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[0].ValueStr, 128);
     OptCnt++;
   }
 
   Token.Event         = NULL;
   Token.OverrideData  = NULL;
diff --git a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.c 
b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.c
index 327e4a2..51d1a5a 100644
--- a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.c
+++ b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.c
@@ -138,20 +138,22 @@ CvtNum (
 
 
 /**
   Convert unsigned int number to decimal number.
 
-  @param  Number   The unsigned int number will be converted.
-  @param  Buffer   Pointer to the buffer to store the decimal number after 
transform.
-
+  @param      Number         The unsigned int number will be converted.
+  @param      Buffer         Pointer to the buffer to store the decimal number 
after transform.
+  @param[in]  BufferSize     The maxsize of the buffer.
+  
   @return the length of the number after transform.
 
 **/
 UINTN
 UtoA10 (
   IN UINTN Number,
-  IN CHAR8 *Buffer
+  IN CHAR8 *Buffer,
+  IN UINTN BufferSize
   )
 {
   UINTN Index;
   CHAR8 TempStr[64];
 
@@ -162,11 +164,11 @@ UtoA10 (
     Index--;
     TempStr[Index]  = (CHAR8) ('0' + (Number % 10));
     Number          = Number / 10;
   } while (Number != 0);
 
-  AsciiStrCpy (Buffer, &TempStr[Index]);
+  AsciiStrCpyS (Buffer, BufferSize, &TempStr[Index]);
 
   return AsciiStrLen (Buffer);
 }
 
 
diff --git a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.h 
b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.h
index 96f48f5..89a6afa 100644
--- a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.h
+++ b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.h
@@ -80,20 +80,23 @@ CvtNum (
 
 
 /**
   Convert unsigned int number to decimal number.
 
-  @param  Number   The unsigned int number will be converted.
-  @param  Buffer   Pointer to the buffer to store the decimal number after 
transform.
-
+  @param      Number         The unsigned int number will be converted.
+  @param      Buffer         Pointer to the buffer to store the decimal number 
after transform.
+  @param[in]  BufferSize     The maxsize of the buffer.
+  
   @return the length of the number after transform.
 
 **/
 UINTN
 UtoA10 (
   IN UINTN Number,
-  IN CHAR8 *Buffer
+  IN CHAR8 *Buffer,
+  IN UINTN BufferSize
+  
   );
 
 
 /**
   Convert ASCII numeric string to a UINTN value.
diff --git a/MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigImpl.c 
b/MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigImpl.c
index fd8555e..baa3eb3 100644
--- a/MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigImpl.c
+++ b/MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigImpl.c
@@ -410,21 +410,21 @@ VlanUpdateForm (
 
   ZeroMem (PrivateData->VlanId, MAX_VLAN_NUMBER);
   for (Index = 0; Index < NumberOfVlan; Index++) {
     String = VlanStr;
 
-    StrCpy (String, L"  VLAN ID:");
+    StrCpyS (String, 30, L"  VLAN ID:");
     String += 10;
     //
     // Pad VlanId string up to 4 characters with space
     //
     DigitalCount = UnicodeValueToString (VlanIdStr, 0, VlanData[Index].VlanId, 
5);
     SetMem16 (String, (4 - DigitalCount) * sizeof (CHAR16), L' ');
-    StrCpy (String + 4 - DigitalCount, VlanIdStr);
+    StrCpyS (String + 4 - DigitalCount, 30 - 10 - (4 - DigitalCount), 
VlanIdStr);
     String += 4;
 
-    StrCpy (String, L", Priority:");
+    StrCpyS (String,  30 - 10 - (4 - DigitalCount) - 4, L", Priority:");
     String += 11;
     String += UnicodeValueToString (String, 0, VlanData[Index].Priority, 4);
     *String = 0;
 
     StringId = HiiSetString (PrivateData->HiiHandle, 0, VlanStr, NULL);
@@ -557,13 +557,13 @@ InstallVlanConfigForm (
   if (EFI_ERROR (Status)) {
     return Status;
   }
   PrivateData->MacString = MacString;
 
-  StrCpy (Str, L"VLAN Configuration (MAC:");
-  StrnCat (Str, MacString, sizeof (EFI_MAC_ADDRESS) * 2);
-  StrCat (Str, L")");
+  StrCpyS (Str, 26 + sizeof (EFI_MAC_ADDRESS) * 2 + 1, L"VLAN Configuration 
(MAC:");
+  StrnCatS (Str, 26 + sizeof (EFI_MAC_ADDRESS) * 2 + 1 - StrLen(L"VLAN 
Configuration (MAC:"), MacString, sizeof (EFI_MAC_ADDRESS) * 2);
+  StrCatS (Str, 2, L")");
   HiiSetString (
     HiiHandle,
     STRING_TOKEN (STR_VLAN_FORM_SET_TITLE_HELP),
     Str,
     NULL
-- 
1.9.5.msysgit.1



------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to