NetworkPkg:Replace unsafe string functions.
authorZhang Lubo <lubo.zhang@intel.com>
Wed, 8 Jul 2015 12:17:11 +0000 (12:17 +0000)
committerluobozhang <luobozhang@Edk2>
Wed, 8 Jul 2015 12:17:11 +0000 (12:17 +0000)
Replace unsafe string functions with new added safe string functions.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo <lubo.zhang@intel.com>
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Qiu Shumin <shumin.qiu@intel.com>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17887 6f19259b-4bc3-4df7-8a09-765794883524

12 files changed:
NetworkPkg/Application/IfConfig6/IfConfig6.c
NetworkPkg/Application/IpsecConfig/Indexer.c
NetworkPkg/Application/IpsecConfig/PolicyEntryOperation.c
NetworkPkg/IScsiDxe/IScsiConfig.c
NetworkPkg/IScsiDxe/IScsiDhcp.c
NetworkPkg/IScsiDxe/IScsiDhcp6.c
NetworkPkg/IScsiDxe/IScsiExtScsiPassThru.c
NetworkPkg/Mtftp6Dxe/Mtftp6Support.c
NetworkPkg/UefiPxeBcDxe/PxeBcMtftp.c
NetworkPkg/UefiPxeBcDxe/PxeBcMtftp.h
NetworkPkg/UefiPxeBcDxe/PxeBcSupport.c
NetworkPkg/UefiPxeBcDxe/PxeBcSupport.h

index 9e228ca..4cec44f 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The implementation for Shell application IfConfig6.\r
 \r
-  Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -127,16 +127,15 @@ SplitStrToList (
   ARG_LIST    *ArgList;\r
   ARG_LIST    *ArgNode;\r
 \r
-  if (*String == L'\0') {\r
+  if (*String == L'\0' || *String == NULL) {\r
     return NULL;\r
   }\r
 \r
   //\r
   // Copy the CONST string to a local copy.\r
   //\r
-  Str     = (CHAR16 *) AllocateZeroPool (StrSize (String));\r
+  Str     = AllocateCopyPool (StrSize (String), String);\r
   ASSERT (Str != NULL);\r
-  Str     = StrnCpy (Str, String, StrLen (String));\r
   ArgStr  = Str;\r
 \r
   //\r
@@ -1717,10 +1716,8 @@ IfConfig6Initialize (
     Private->OpCode = IfConfig6OpList;\r
     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-l");\r
     if (ValueStr != NULL) {\r
-      Str             = (CHAR16 *) AllocateZeroPool (StrSize (ValueStr));\r
+      Str             = AllocateCopyPool (StrSize (ValueStr), ValueStr);\r
       ASSERT (Str != NULL);\r
-\r
-      Str             = StrnCpy (Str, ValueStr, StrLen (ValueStr));\r
       Private->IfName = Str;\r
     }\r
   }\r
@@ -1731,10 +1728,8 @@ IfConfig6Initialize (
     Private->OpCode = IfConfig6OpClear;\r
     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-r");\r
     if (ValueStr != NULL) {\r
-      Str             = (CHAR16 *) AllocateZeroPool (StrSize (ValueStr));\r
+      Str             = AllocateCopyPool (StrSize (ValueStr), ValueStr);\r
       ASSERT (Str != NULL);\r
-\r
-      Str             = StrnCpy (Str, ValueStr, StrLen (ValueStr));\r
       Private->IfName = Str;\r
     }\r
   }\r
index 9e066b1..83ceda4 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The implementation of construct ENTRY_INDEXER in IpSecConfig application.\r
 \r
-  Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -235,7 +235,7 @@ ConstructPadIndexer (
 \r
       Indexer->PadId.PeerIdValid = TRUE;\r
       ZeroMem (Indexer->PadId.Id.PeerId, MAX_PEERID_LEN);\r
-      StrnCpy ((CHAR16 *) Indexer->PadId.Id.PeerId, ValueStr, ARRAY_SIZE (Indexer->PadId.Id.PeerId) - 1);\r
+      StrnCpyS ((CHAR16 *) Indexer->PadId.Id.PeerId, MAX_PEERID_LEN / sizeof (CHAR16), ValueStr, MAX_PEERID_LEN / sizeof (CHAR16) - 1);\r
     }\r
   }\r
 \r
index 7e04573..970caa1 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The implementation of policy entry operation function in IpSecConfig application.\r
 \r
-  Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -1104,7 +1104,7 @@ CreatePadEntry (
   ValueStr = ShellCommandLineGetValue (ParamPackage, L"--peer-id");\r
   if (ValueStr != NULL) {\r
     (*PadId)->PeerIdValid = TRUE;\r
-    StrnCpy ((CHAR16 *) (*PadId)->Id.PeerId, ValueStr, ARRAY_SIZE ((*PadId)->Id.PeerId) - 1);\r
+    StrnCpyS ((CHAR16 *) (*PadId)->Id.PeerId, MAX_PEERID_LEN / sizeof (CHAR16), ValueStr, MAX_PEERID_LEN / sizeof (CHAR16) - 1);\r
     *Mask |= PEER_ID;\r
   }\r
 \r
@@ -1399,7 +1399,7 @@ CombineSpdEntry (
   // Process Data\r
   //\r
   if ((Mask & NAME) != 0) {\r
-    AsciiStrCpy ((CHAR8 *) OldData->Name, (CHAR8 *) NewData->Name);\r
+    AsciiStrCpyS ((CHAR8 *) OldData->Name, MAX_PEERID_LEN, (CHAR8 *) NewData->Name);\r
   }\r
 \r
   if ((Mask & PACKET_FLAG) != 0) {\r
index 5cb1157..69a4003 100644 (file)
@@ -2393,7 +2393,7 @@ IScsiFormCallback (
           NULL\r
           );\r
       } else {\r
-        AsciiStrCpy (Private->Current->SessionConfigData.TargetName, IScsiName);\r
+        AsciiStrCpyS (Private->Current->SessionConfigData.TargetName, ISCSI_NAME_MAX_SIZE, IScsiName);\r
       }\r
 \r
       break;\r
index 3706256..fa2412e 100644 (file)
@@ -175,7 +175,7 @@ IScsiDhcpExtractRootPath (
     goto ON_EXIT;\r
   }\r
 \r
-  AsciiStrCpy (ConfigNvData->TargetName, Field->Str);\r
+  AsciiStrCpyS (ConfigNvData->TargetName, ISCSI_NAME_MAX_SIZE, Field->Str);\r
 \r
 ON_EXIT:\r
 \r
index 2627a59..331b0f1 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   iSCSI DHCP6 related configuration routines.\r
 \r
-Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2009 - 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
@@ -203,7 +203,7 @@ IScsiDhcp6ExtractRootPath (
     goto ON_EXIT;\r
   }\r
 \r
-  AsciiStrCpy (ConfigNvData->TargetName, Field->Str);\r
+  AsciiStrCpyS (ConfigNvData->TargetName, ISCSI_NAME_MAX_SIZE, Field->Str);\r
 \r
 ON_EXIT:\r
 \r
index c785853..f971244 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The implementation of EFI_EXT_SCSI_PASS_THRU_PROTOCOL.\r
 \r
-Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 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
@@ -273,7 +273,7 @@ IScsiExtScsiPassThruBuildDevicePath (
 \r
   CopyMem (&Node->Iscsi.Lun, ConfigNvData->BootLun, sizeof (UINT64));\r
   Node->Iscsi.TargetPortalGroupTag = Session->TargetPortalGroupTag;\r
-  AsciiStrCpy ((CHAR8 *) Node + sizeof (ISCSI_DEVICE_PATH), ConfigNvData->TargetName);\r
+  AsciiStrCpyS ((CHAR8 *) Node + sizeof (ISCSI_DEVICE_PATH), AsciiStrLen (ConfigNvData->TargetName) + 1, ConfigNvData->TargetName);\r
 \r
   *DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Node;\r
 \r
index f5b2231..91680b2 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Mtftp6 support functions implementation.\r
 \r
-  Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -512,19 +512,22 @@ Mtftp6SendRequest (
 \r
   Packet->OpCode = HTONS (Operation);\r
   Cur            = Packet->Rrq.Filename;\r
-  Cur            = (UINT8 *) AsciiStrCpy ((CHAR8 *) Cur, (CHAR8 *) Token->Filename);\r
+  Cur            = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len - 2, (CHAR8 *) Token->Filename);\r
   Cur           += AsciiStrLen ((CHAR8 *) Token->Filename) + 1;\r
-  Cur            = (UINT8 *) AsciiStrCpy ((CHAR8 *) Cur, (CHAR8 *) Mode);\r
+  Cur            = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len - 2 - (AsciiStrLen ((CHAR8 *) Token->Filename) + 1), (CHAR8 *) Mode);\r
   Cur           += AsciiStrLen ((CHAR8 *) Mode) + 1;\r
+  Len -= ((UINT32) AsciiStrLen ((CHAR8 *) Token->Filename) + (UINT32) AsciiStrLen ((CHAR8 *) Mode) + 4);\r
 \r
   //\r
   // Copy all the extension options into the packet.\r
   //\r
   for (Index = 0; Index < Token->OptionCount; ++Index) {\r
-    Cur  = (UINT8 *) AsciiStrCpy ((CHAR8 *) Cur, (CHAR8 *) Options[Index].OptionStr);\r
+    Cur  = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len, (CHAR8 *) Options[Index].OptionStr);\r
     Cur += AsciiStrLen ((CHAR8 *) Options[Index].OptionStr) + 1;\r
-    Cur  = (UINT8 *) AsciiStrCpy ((CHAR8 *) Cur, (CHAR8 *) Options[Index].ValueStr);\r
+    Len -= (UINT32)(AsciiStrLen ((CHAR8 *) Options[Index].OptionStr) + 1);\r
+    Cur  = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len, (CHAR8 *) Options[Index].ValueStr);\r
     Cur += AsciiStrLen ((CHAR8 *) (CHAR8 *) Options[Index].ValueStr) + 1;\r
+    Len -= (UINT32)(AsciiStrLen ((CHAR8 *) Options[Index].ValueStr) + 1);\r
   }\r
 \r
   //\r
@@ -584,7 +587,7 @@ Mtftp6SendError (
   TftpError->OpCode          = HTONS (EFI_MTFTP6_OPCODE_ERROR);\r
   TftpError->Error.ErrorCode = HTONS (ErrCode);\r
 \r
-  AsciiStrCpy ((CHAR8 *) TftpError->Error.ErrorMessage, (CHAR8 *) ErrInfo);\r
+  AsciiStrCpyS ((CHAR8 *) TftpError->Error.ErrorMessage, sizeof (TftpError->Error.ErrorMessage) / sizeof (TftpError->Error.ErrorMessage[0]), (CHAR8 *) ErrInfo);\r
 \r
   //\r
   // Save the packet buf for retransmit\r
index 09196c7..270190d 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Functions implementation related with Mtftp for UefiPxeBc Driver.\r
 \r
-  Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -64,10 +64,11 @@ PxeBcMtftp6CheckPacket (
     //\r
     Private->Mode.TftpErrorReceived   = TRUE;\r
     Private->Mode.TftpError.ErrorCode = (UINT8) Packet->Error.ErrorCode;\r
-    AsciiStrnCpy (\r
+    AsciiStrnCpyS (\r
       Private->Mode.TftpError.ErrorString,\r
+      PXE_MTFTP_ERROR_STRING_LENGTH,\r
       (CHAR8 *) Packet->Error.ErrorMessage,\r
-      PXE_MTFTP_ERROR_STRING_LENGTH\r
+      PXE_MTFTP_ERROR_STRING_LENGTH - 1\r
       );\r
     Private->Mode.TftpError.ErrorString[PXE_MTFTP_ERROR_STRING_LENGTH - 1] = '\0';\r
   }\r
@@ -151,13 +152,13 @@ PxeBcMtftp6GetFileSize (
   // Build the required options for get info.\r
   //\r
   ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_TSIZE_INDEX];\r
-  PxeBcUintnToAscDec (0, OptBuf);\r
+  PxeBcUintnToAscDec (0, OptBuf, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
   ReqOpt[0].ValueStr  = OptBuf;\r
 \r
   if (BlockSize != NULL) {\r
     ReqOpt[1].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
     ReqOpt[1].ValueStr  = (UINT8 *) (ReqOpt[0].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1);\r
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[1].ValueStr);\r
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[1].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX - (AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1));\r
     OptCnt++;\r
   }\r
 \r
@@ -178,10 +179,11 @@ PxeBcMtftp6GetFileSize (
       //\r
       Private->Mode.TftpErrorReceived   = TRUE;\r
       Private->Mode.TftpError.ErrorCode = (UINT8) Packet->Error.ErrorCode;\r
-      AsciiStrnCpy (\r
+      AsciiStrnCpyS (\r
         Private->Mode.TftpError.ErrorString,\r
+        PXE_MTFTP_ERROR_STRING_LENGTH,\r
         (CHAR8 *) Packet->Error.ErrorMessage,\r
-        PXE_MTFTP_ERROR_STRING_LENGTH\r
+        PXE_MTFTP_ERROR_STRING_LENGTH - 1\r
         );\r
       Private->Mode.TftpError.ErrorString[PXE_MTFTP_ERROR_STRING_LENGTH - 1] = '\0';\r
     }\r
@@ -273,7 +275,7 @@ PxeBcMtftp6ReadFile (
   if (BlockSize != NULL) {\r
     ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
     ReqOpt[0].ValueStr  = OptBuf;\r
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr);\r
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
     OptCnt++;\r
   }\r
 \r
@@ -356,7 +358,7 @@ PxeBcMtftp6WriteFile (
   if (BlockSize != NULL) {\r
     ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
     ReqOpt[0].ValueStr  = OptBuf;\r
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr);\r
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
     OptCnt++;\r
   }\r
 \r
@@ -431,7 +433,7 @@ PxeBcMtftp6ReadDirectory (
   if (BlockSize != NULL) {\r
     ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
     ReqOpt[0].ValueStr  = OptBuf;\r
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr);\r
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
     OptCnt++;\r
   }\r
 \r
@@ -508,10 +510,11 @@ PxeBcMtftp4CheckPacket (
     //\r
     Private->Mode.TftpErrorReceived   = TRUE;\r
     Private->Mode.TftpError.ErrorCode = (UINT8) Packet->Error.ErrorCode;\r
-    AsciiStrnCpy (\r
+    AsciiStrnCpyS (\r
       Private->Mode.TftpError.ErrorString,\r
+      PXE_MTFTP_ERROR_STRING_LENGTH,\r
       (CHAR8 *) Packet->Error.ErrorMessage,\r
-      PXE_MTFTP_ERROR_STRING_LENGTH\r
+      PXE_MTFTP_ERROR_STRING_LENGTH - 1\r
       );\r
     Private->Mode.TftpError.ErrorString[PXE_MTFTP_ERROR_STRING_LENGTH - 1] = '\0';\r
   }\r
@@ -595,13 +598,13 @@ PxeBcMtftp4GetFileSize (
   // Build the required options for get info.\r
   //\r
   ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_TSIZE_INDEX];\r
-  PxeBcUintnToAscDec (0, OptBuf);\r
+  PxeBcUintnToAscDec (0, OptBuf, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
   ReqOpt[0].ValueStr  = OptBuf;\r
 \r
   if (BlockSize != NULL) {\r
     ReqOpt[1].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
     ReqOpt[1].ValueStr  = (UINT8 *) (ReqOpt[0].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1);\r
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[1].ValueStr);\r
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[1].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX - (AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1));\r
     OptCnt++;\r
   }\r
 \r
@@ -622,10 +625,11 @@ PxeBcMtftp4GetFileSize (
       //\r
       Private->Mode.TftpErrorReceived   = TRUE;\r
       Private->Mode.TftpError.ErrorCode = (UINT8) Packet->Error.ErrorCode;\r
-      AsciiStrnCpy (\r
+      AsciiStrnCpyS (\r
         Private->Mode.TftpError.ErrorString,\r
+        PXE_MTFTP_ERROR_STRING_LENGTH,\r
         (CHAR8 *) Packet->Error.ErrorMessage,\r
-        PXE_MTFTP_ERROR_STRING_LENGTH\r
+        PXE_MTFTP_ERROR_STRING_LENGTH - 1\r
         );\r
       Private->Mode.TftpError.ErrorString[PXE_MTFTP_ERROR_STRING_LENGTH - 1] = '\0';\r
     }\r
@@ -717,7 +721,7 @@ PxeBcMtftp4ReadFile (
   if (BlockSize != NULL) {\r
     ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
     ReqOpt[0].ValueStr  = OptBuf;\r
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr);\r
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
     OptCnt++;\r
   }\r
 \r
@@ -800,7 +804,7 @@ PxeBcMtftp4WriteFile (
   if (BlockSize != NULL) {\r
     ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
     ReqOpt[0].ValueStr  = OptBuf;\r
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr);\r
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
     OptCnt++;\r
   }\r
 \r
@@ -875,7 +879,7 @@ PxeBcMtftp4ReadDirectory (
   if (BlockSize != NULL) {\r
     ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
     ReqOpt[0].ValueStr  = OptBuf;\r
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr);\r
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
     OptCnt++;\r
   }\r
 \r
index 1064195..f115076 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Functions declaration related with Mtftp for UefiPxeBc Driver.\r
 \r
-  Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -21,6 +21,7 @@
 #define PXE_MTFTP_OPTION_TSIZE_INDEX       2\r
 #define PXE_MTFTP_OPTION_MULTICAST_INDEX   3\r
 #define PXE_MTFTP_OPTION_MAXIMUM_INDEX     4\r
+#define PXE_MTFTP_OPTBUF_MAXNUM_INDEX      128\r
 \r
 #define PXE_MTFTP_ERROR_STRING_LENGTH      127   // refer to definition of struct EFI_PXE_BASE_CODE_TFTP_ERROR.\r
 #define PXE_MTFTP_DEFAULT_BLOCK_SIZE       512   // refer to rfc-1350.\r
index 88ae7b6..36b0665 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Support functions implementation for UefiPxeBc Driver.\r
 \r
-  Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -1392,6 +1392,7 @@ PxeBcUintnToAscDecWithFormat (
 \r
   @param[in]  Number         Numeric value to be converted.\r
   @param[in]  Buffer         The pointer to the buffer for ASCII string.\r
+  @param[in]  BufferSize     The maxsize of the buffer.\r
 \r
   @return     Length         The actual length of the ASCII string.\r
 \r
@@ -1399,7 +1400,8 @@ PxeBcUintnToAscDecWithFormat (
 UINTN\r
 PxeBcUintnToAscDec (\r
   IN UINTN               Number,\r
-  IN UINT8               *Buffer\r
+  IN UINT8               *Buffer,\r
+  IN UINTN               BufferSize\r
   )\r
 {\r
   UINTN           Index;\r
@@ -1415,7 +1417,7 @@ PxeBcUintnToAscDec (
     Number         = (UINTN) (Number / 10);\r
   } while (Number != 0);\r
 \r
-  AsciiStrCpy ((CHAR8 *) Buffer, &TempStr[Index]);\r
+  AsciiStrCpyS ((CHAR8 *) Buffer, BufferSize, &TempStr[Index]);\r
 \r
   Length = AsciiStrLen ((CHAR8 *) Buffer);\r
 \r
index fc99fad..0a43aeb 100644 (file)
@@ -448,14 +448,16 @@ PxeBcUintnToAscDecWithFormat (
 \r
   @param[in]  Number         Numeric value to be converted.\r
   @param[in]  Buffer         Pointer to the buffer for ASCII string.\r
-\r
+  @param[in]  BufferSize     The maxsize of the buffer.\r
+  \r
   @return     Length         The actual length of the ASCII string.\r
 \r
 **/\r
 UINTN\r
 PxeBcUintnToAscDec (\r
   IN UINTN               Number,\r
-  IN UINT8               *Buffer\r
+  IN UINT8               *Buffer,\r
+  IN UINTN               BufferSize\r
   );\r
 \r
 /**\r