This patch is used to fix unspecified address use case in
ConstructSpdIndexer() function. Indexer->Name for
ConstructSpdIndexer is unspecified, that will be a problem
for UnicodeStrToAsciiStr.

This patch also refine the code by removing ASSERT and user
error handling.

Cc: Fu Siyuan <siyuan...@intel.com>
Cc: Ye Ting <ting...@intel.com>
Cc: Zeng Star <star.z...@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu <jiaxin...@intel.com>
---
 NetworkPkg/Application/IpsecConfig/Indexer.c | 26 ++++++++++++++++----------
 NetworkPkg/Application/IpsecConfig/Indexer.h |  4 ++--
 NetworkPkg/Application/IpsecConfig/Match.c   |  4 ++--
 3 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/NetworkPkg/Application/IpsecConfig/Indexer.c 
b/NetworkPkg/Application/IpsecConfig/Indexer.c
index 83ceda4..353b22e 100644
--- a/NetworkPkg/Application/IpsecConfig/Indexer.c
+++ b/NetworkPkg/Application/IpsecConfig/Indexer.c
@@ -1,9 +1,9 @@
 /** @file
   The implementation of construct ENTRY_INDEXER in IpSecConfig application.
 
-  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
   which accompanies this distribution.  The full text of the license may be 
found at
   http://opensource.org/licenses/bsd-license.php.
@@ -42,21 +42,23 @@ ConstructSpdIndexer (
   } else if (ShellCommandLineGetFlag (ParamPackage, L"-d")) {
     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-d");
   } else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) {
     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e");
   } else {
-    ASSERT (FALSE);
+    return EFI_INVALID_PARAMETER;
   }
 
-  ASSERT (ValueStr != NULL);
-
+  if (ValueStr == NULL) {
+    return EFI_INVALID_PARAMETER;
+  }
+  
   Value64 = StrToUInteger (ValueStr, &Status);
   if (!EFI_ERROR (Status)) {
     Indexer->Index = (UINTN) Value64;
-    Indexer->Name  = NULL;
+    ZeroMem (Indexer->Name, MAX_PEERID_LEN);
   } else {
-    UnicodeStrToAsciiStr (ValueStr, (CHAR8 *) Indexer->Name);
+    UnicodeStrToAsciiStrS (ValueStr, (CHAR8 *) Indexer->Name, MAX_PEERID_LEN);
   }
 
   return EFI_SUCCESS;
 }
 
@@ -87,14 +89,16 @@ ConstructSadIndexer (
   } else if (ShellCommandLineGetFlag (ParamPackage, L"-d")) {
     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-d");
   } else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) {
     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e");
   } else {
-    ASSERT (FALSE);
+    return EFI_INVALID_PARAMETER;
   }
 
-  ASSERT (ValueStr != NULL);
+  if (ValueStr == NULL) {
+    return EFI_INVALID_PARAMETER;
+  }
 
   Value64 = StrToUInteger (ValueStr, &Status);
   if (!EFI_ERROR (Status)) {
     Indexer->Index = (UINTN) Value64;
     ZeroMem (&Indexer->SaId, sizeof (EFI_IPSEC_SA_ID));
@@ -185,14 +189,16 @@ ConstructPadIndexer (
   } else if (ShellCommandLineGetFlag (ParamPackage, L"-d")) {
     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-d");
   } else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) {
     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e");
   } else {
-    ASSERT (FALSE);
+    return EFI_INVALID_PARAMETER;
   }
 
-  ASSERT (ValueStr != NULL);
+  if (ValueStr == NULL) {
+    return EFI_INVALID_PARAMETER;
+  }
 
   Value64 = StrToUInteger (ValueStr, &Status);
 
   if (!EFI_ERROR (Status)) {
     Indexer->Index = (UINTN) Value64;
diff --git a/NetworkPkg/Application/IpsecConfig/Indexer.h 
b/NetworkPkg/Application/IpsecConfig/Indexer.h
index 078f38a..b0e62fb 100644
--- a/NetworkPkg/Application/IpsecConfig/Indexer.h
+++ b/NetworkPkg/Application/IpsecConfig/Indexer.h
@@ -1,10 +1,10 @@
 /** @file
   The internal structure and function declaration to construct ENTRY_INDEXER in
   IpSecConfig application.
 
-  Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
   which accompanies this distribution.  The full text of the license may be 
found at
   http://opensource.org/licenses/bsd-license.php.
@@ -16,11 +16,11 @@
 
 #ifndef _INDEXER_H_
 #define _INDEXER_H_
 
 typedef struct {
-  UINT8    *Name;
+  UINT8    Name[MAX_PEERID_LEN];
   UINTN    Index;    // Used only if Name is NULL.
 } SPD_ENTRY_INDEXER;
 
 typedef struct {
   EFI_IPSEC_SA_ID    SaId;
diff --git a/NetworkPkg/Application/IpsecConfig/Match.c 
b/NetworkPkg/Application/IpsecConfig/Match.c
index d283f5b..2ee763e 100644
--- a/NetworkPkg/Application/IpsecConfig/Match.c
+++ b/NetworkPkg/Application/IpsecConfig/Match.c
@@ -1,9 +1,9 @@
 /** @file
   The implementation of match policy entry function in IpSecConfig application.
 
-  Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
   which accompanies this distribution.  The full text of the license may be 
found at
   http://opensource.org/licenses/bsd-license.php.
@@ -61,11 +61,11 @@ MatchSpdEntry (
   )
 {
   BOOLEAN    Match;
 
   Match = FALSE;
-  if (Indexer->Name != NULL) {
+  if (!IsMemoryZero (Indexer->Name, MAX_PEERID_LEN)) {
     if ((Data->Name != NULL) && (AsciiStrCmp ((CHAR8 *) Indexer->Name, (CHAR8 
*) Data->Name) == 0)) {
       Match = TRUE;
     }
   } else {
     if (Indexer->Index == 0) {
-- 
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