Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo <lubo.zh...@intel.com>
---
 .../Universal/Network/Mtftp4Dxe/Mtftp4Support.c    | 45 +++++++++++++++++-----
 1 file changed, 36 insertions(+), 9 deletions(-)

diff --git a/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.c 
b/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.c
index 647fe64..8c8dd0c 100644
--- a/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.c
+++ b/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.c
@@ -276,10 +276,11 @@ Mtftp4SendRequest (
   )
 {
   EFI_MTFTP4_PACKET         *Packet;
   EFI_MTFTP4_OPTION         *Options;
   EFI_MTFTP4_TOKEN          *Token;
+  RETURN_STATUS             Status;
   NET_BUF                   *Nbuf;
   UINT8                     *Mode;
   UINT8                     *Cur;
   UINT32                    Len;
   UINTN                     Index;
@@ -317,27 +318,53 @@ Mtftp4SendRequest (
   Packet         = (EFI_MTFTP4_PACKET *) NetbufAllocSpace (Nbuf, Len, FALSE);
   ASSERT (Packet != NULL);
 
   Packet->OpCode = HTONS (Instance->Operation);
   Cur            = Packet->Rrq.Filename;
-  Cur            = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len - 2, (CHAR8 *) 
Token->Filename);
+  Status         = AsciiStrCpyS ((CHAR8 *) Cur, Len - 2, (CHAR8 *) 
Token->Filename);
+
+  if (EFI_ERROR (Status)) {
+    goto ERROR_EXIT;
+  }
+  
+  Cur            = (UINT8 *) Cur;
   Cur           += AsciiStrLen ((CHAR8 *) Token->Filename) + 1;
-  Cur            = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len - 2 - 
(AsciiStrLen ((CHAR8 *) Token->Filename) + 1), (CHAR8 *) Mode);
+  Status         = AsciiStrCpyS ((CHAR8 *) Cur, Len - 2 - (AsciiStrLen ((CHAR8 
*) Token->Filename) + 1), (CHAR8 *) Mode);
+  if (EFI_ERROR (Status)) {
+    goto ERROR_EXIT;
+  }
+
+  Cur            = (UINT8 *) Cur;
   Cur           += AsciiStrLen ((CHAR8 *) Mode) + 1;
-  Len -= ((UINT32) AsciiStrLen ((CHAR8 *) Token->Filename) + (UINT32) 
AsciiStrLen ((CHAR8 *) Mode) + 4);
+  Len           -= ((UINT32) AsciiStrLen ((CHAR8 *) Token->Filename) + 
(UINT32) AsciiStrLen ((CHAR8 *) Mode) + 4);
 
   for (Index = 0; Index < Token->OptionCount; ++Index) {
-    Cur  = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len, (CHAR8 *) 
Options[Index].OptionStr);
-    Cur += AsciiStrLen ((CHAR8 *) Options[Index].OptionStr) + 1;
-    Len -= (UINT32) AsciiStrLen ((CHAR8 *) Options[Index].OptionStr) + 1;
+    Status = AsciiStrCpyS ((CHAR8 *) Cur, Len, (CHAR8 *) 
Options[Index].OptionStr);
 
-    Cur  = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len, (CHAR8 *) 
Options[Index].ValueStr);
-    Cur += AsciiStrLen ((CHAR8 *) (CHAR8 *) Options[Index].ValueStr) + 1;
-    Len -= (UINT32) AsciiStrLen ((CHAR8 *) (CHAR8 *) Options[Index].ValueStr) 
+ 1;
+    if (EFI_ERROR (Status)) {
+     goto ERROR_EXIT;
+    }
+    
+    Cur    = (UINT8 *) Cur;
+    Cur   += AsciiStrLen ((CHAR8 *) Options[Index].OptionStr) + 1;
+    Len   -= (UINT32) AsciiStrLen ((CHAR8 *) Options[Index].OptionStr) + 1;
+    Status = AsciiStrCpyS ((CHAR8 *) Cur, Len, (CHAR8 *) 
Options[Index].ValueStr);
+
+    if (EFI_ERROR (Status)) {
+     goto ERROR_EXIT;
+    }
+    
+    Cur    =( UINT8 *) Cur;
+    Cur   += AsciiStrLen ((CHAR8 *) (CHAR8 *) Options[Index].ValueStr) + 1;
+    Len   -= (UINT32) AsciiStrLen ((CHAR8 *) (CHAR8 *) 
Options[Index].ValueStr) + 1;
   }
 
   return Mtftp4SendPacket (Instance, Nbuf);
+
+ERROR_EXIT:
+  NetbufFree (Nbuf);
+  return Status;
 }
 
 
 /**
   Build then send an error message.
-- 
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