NetworkPkg: Fix unspecified address use case in IpsecConfig

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.fu@intel.com>
Cc: Ye Ting <ting.ye@intel.com>
Cc: Zeng Star <star.zeng@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com>
Reviewed-by: Zeng Star <star.zeng@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
This commit is contained in:
Jiaxin Wu 2016-06-15 16:23:51 +08:00
parent d8d217c576
commit ca9b4d22f4
3 changed files with 21 additions and 15 deletions

View File

@ -1,7 +1,7 @@
/** @file /** @file
The implementation of construct ENTRY_INDEXER in IpSecConfig application. 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 This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@ -44,17 +44,19 @@ ConstructSpdIndexer (
} else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) { } else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) {
ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e"); ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e");
} else { } else {
ASSERT (FALSE); return EFI_INVALID_PARAMETER;
} }
ASSERT (ValueStr != NULL); if (ValueStr == NULL) {
return EFI_INVALID_PARAMETER;
}
Value64 = StrToUInteger (ValueStr, &Status); Value64 = StrToUInteger (ValueStr, &Status);
if (!EFI_ERROR (Status)) { if (!EFI_ERROR (Status)) {
Indexer->Index = (UINTN) Value64; Indexer->Index = (UINTN) Value64;
Indexer->Name = NULL; ZeroMem (Indexer->Name, MAX_PEERID_LEN);
} else { } else {
UnicodeStrToAsciiStr (ValueStr, (CHAR8 *) Indexer->Name); UnicodeStrToAsciiStrS (ValueStr, (CHAR8 *) Indexer->Name, MAX_PEERID_LEN);
} }
return EFI_SUCCESS; return EFI_SUCCESS;
@ -89,10 +91,12 @@ ConstructSadIndexer (
} else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) { } else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) {
ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e"); ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e");
} else { } else {
ASSERT (FALSE); return EFI_INVALID_PARAMETER;
} }
ASSERT (ValueStr != NULL); if (ValueStr == NULL) {
return EFI_INVALID_PARAMETER;
}
Value64 = StrToUInteger (ValueStr, &Status); Value64 = StrToUInteger (ValueStr, &Status);
if (!EFI_ERROR (Status)) { if (!EFI_ERROR (Status)) {
@ -187,10 +191,12 @@ ConstructPadIndexer (
} else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) { } else if (ShellCommandLineGetFlag (ParamPackage, L"-e")) {
ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e"); ValueStr = ShellCommandLineGetValue (ParamPackage, L"-e");
} else { } else {
ASSERT (FALSE); return EFI_INVALID_PARAMETER;
} }
ASSERT (ValueStr != NULL); if (ValueStr == NULL) {
return EFI_INVALID_PARAMETER;
}
Value64 = StrToUInteger (ValueStr, &Status); Value64 = StrToUInteger (ValueStr, &Status);

View File

@ -2,7 +2,7 @@
The internal structure and function declaration to construct ENTRY_INDEXER in The internal structure and function declaration to construct ENTRY_INDEXER in
IpSecConfig application. 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 This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@ -18,8 +18,8 @@
#define _INDEXER_H_ #define _INDEXER_H_
typedef struct { typedef struct {
UINT8 *Name; UINT8 Name[MAX_PEERID_LEN];
UINTN Index; // Used only if Name is NULL. UINTN Index; // Used only if Name buffer is filled with zero.
} SPD_ENTRY_INDEXER; } SPD_ENTRY_INDEXER;
typedef struct { typedef struct {

View File

@ -1,7 +1,7 @@
/** @file /** @file
The implementation of match policy entry function in IpSecConfig application. 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 This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@ -63,7 +63,7 @@ MatchSpdEntry (
BOOLEAN Match; BOOLEAN Match;
Match = FALSE; 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)) { if ((Data->Name != NULL) && (AsciiStrCmp ((CHAR8 *) Indexer->Name, (CHAR8 *) Data->Name) == 0)) {
Match = TRUE; Match = TRUE;
} }