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 9e228ca7bc76b50e5af6ecb204f86e07f746fce3..4cec44f8d5e91ecf6428d731e1a18db46d88daa8 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 9e066b1cb54ed1c21e9396fa6f4e1e9a2b3821ba..83ceda4b57f04043889c1da9965b19d0d3bc9c80 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 7e04573022a49d7957d3b58216874c2d58eab3f3..970caa16ca0bc43aba7824ad452fb28c8dacd48f 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 5cb11572bb75ff57a57787cbd9024c23ae1f4a4f..69a400389dc5d57372b665ac1f0a2e3442dacdb6 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 3706256db5f76e676035117383ad19be93a4bc05..fa2412ebd8628d5b49d8eef0824edf55ec09dcc4 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 2627a59dd6b5b6bc67f3f38163196eaf0dce06d4..331b0f161b25bdac6a395190717a0078881eb257 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 c785853bd8f27583080c1a836256dfafcf2ad065..f9712449b5066ccf08d611d1852b0792924583eb 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 f5b22313eea36b857d1cc9768200cfd8cc3f4720..91680b24664e36ecf0ed052479f6b79e861afe61 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 09196c7ac6579e473067287412c12f935ffc63fd..270190d42e4b75f6bbc1c34bf1e955d775501ef1 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 1064195a82ead18d10c4146bd39c67e6e2dc5921..f1150762c6e0eb8678724ef7b3d23750ce4b58b0 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 88ae7b6a7a145c18097ef3ba9f55a4b8d75eb6bc..36b0665a96b888a9753ffa493d3c1b5d6d34a12e 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 fc99fadad6ac0e2723e463e6290347bc54c8f613..0a43aeb79b3e47be8754f2b4e09044e452b03984 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