summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHao Wu <hao.a.wu@intel.com>2016-09-27 13:40:58 +0800
committerHao Wu <hao.a.wu@intel.com>2016-11-08 16:37:17 +0800
commitfd5425230ed22872126b52f22a7294e352ca3349 (patch)
tree2a4820e880131f8d83c68deddc064cbfc896e1b1
parenta6ac965bca117ef33b38a96c36643b36757b7698 (diff)
downloadedk2-platforms-fd5425230ed22872126b52f22a7294e352ca3349.tar.xz
BaseTools/VfrCompile: Avoid freeing memory with mismatched functions
Memory allocated by operator new[] should be freed using delete[] to avoid possible memory leak. Cc: Liming Gao <liming.gao@intel.com> Cc: Yonghong Zhu <yonghong.zhu@intel.com> Cc: Eric Dong <eric.dong@intel.com> Cc: Dandan Bi <dandan.bi@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
-rw-r--r--BaseTools/Source/C/VfrCompile/VfrCompiler.cpp4
-rw-r--r--BaseTools/Source/C/VfrCompile/VfrError.cpp4
-rw-r--r--BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp6
-rw-r--r--BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp24
-rw-r--r--BaseTools/Source/C/VfrCompile/VfrUtilityLib.h4
5 files changed, 22 insertions, 20 deletions
diff --git a/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp b/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
index 16453439ec..1bca37244d 100644
--- a/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
+++ b/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
@@ -677,7 +677,7 @@ CVfrCompiler::PreProcess (
goto Fail;
}
- delete PreProcessCmd;
+ delete[] PreProcessCmd;
Out:
SET_RUN_STATUS (STATUS_PREPROCESSED);
@@ -687,7 +687,7 @@ Fail:
if (!IS_RUN_STATUS(STATUS_DEAD)) {
SET_RUN_STATUS (STATUS_FAILED);
}
- delete PreProcessCmd;
+ delete[] PreProcessCmd;
}
extern UINT8 VfrParserStart (IN FILE *, IN INPUT_INFO_TO_SYNTAX *);
diff --git a/BaseTools/Source/C/VfrCompile/VfrError.cpp b/BaseTools/Source/C/VfrCompile/VfrError.cpp
index 3c506ec204..285e175fa6 100644
--- a/BaseTools/Source/C/VfrCompile/VfrError.cpp
+++ b/BaseTools/Source/C/VfrCompile/VfrError.cpp
@@ -2,7 +2,7 @@
VfrCompiler error handler.
-Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 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
@@ -145,7 +145,7 @@ SVfrFileScopeRecord::~SVfrFileScopeRecord (
)
{
if (mFileName != NULL) {
- delete mFileName;
+ delete[] mFileName;
}
}
diff --git a/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp b/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
index 124b8e8e72..9c76b29418 100644
--- a/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
+++ b/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
@@ -56,13 +56,13 @@ SPendingAssign::~SPendingAssign (
)
{
if (mKey != NULL) {
- delete mKey;
+ delete[] mKey;
}
mAddr = NULL;
mLen = 0;
mLineNo = 0;
if (mMsg != NULL) {
- delete mMsg;
+ delete[] mMsg;
}
mNext = NULL;
}
@@ -898,7 +898,7 @@ CFormPkg::DeclarePendingQuestion (
strcpy (NewStr, SName);
strcat (NewStr, VarStr + strlen (FName));
ReturnCode = lCVfrVarDataTypeDB.GetDataFieldInfo (NewStr, Info.mInfo.mVarOffset, Info.mVarType, Info.mVarTotalSize);
- delete NewStr;
+ delete[] NewStr;
}
} else {
ReturnCode = VFR_RETURN_UNSUPPORTED;
diff --git a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
index 24b0bfa6fd..1afa5a2590 100644
--- a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
+++ b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
@@ -123,7 +123,7 @@ SConfigInfo::~SConfigInfo (
VOID
)
{
- BUFFER_SAFE_FREE (mValue);
+ ARRAY_SAFE_FREE (mValue);
}
SConfigItem::SConfigItem (
@@ -200,9 +200,9 @@ SConfigItem::~SConfigItem (
{
SConfigInfo *Info;
- BUFFER_SAFE_FREE (mName);
- BUFFER_SAFE_FREE (mGuid);
- BUFFER_SAFE_FREE (mId);
+ ARRAY_SAFE_FREE (mName);
+ ARRAY_SAFE_FREE (mGuid);
+ ARRAY_SAFE_FREE (mId);
while (mInfoStrList != NULL) {
Info = mInfoStrList;
mInfoStrList = mInfoStrList->mNext;
@@ -1393,7 +1393,7 @@ SVfrVarStorageNode::~SVfrVarStorageNode (
)
{
if (mVarStoreName != NULL) {
- delete mVarStoreName;
+ delete[] mVarStoreName;
}
if (mVarStoreType == EFI_VFR_VARSTORE_NAME) {
@@ -2102,7 +2102,7 @@ SVfrDefaultStoreNode::~SVfrDefaultStoreNode (
)
{
if (mRefName != NULL) {
- delete mRefName;
+ delete[] mRefName;
}
}
@@ -2304,7 +2304,7 @@ SVfrRuleNode::~SVfrRuleNode (
)
{
if (mRuleName != NULL) {
- delete mRuleName;
+ delete[] mRuleName;
}
}
@@ -2523,11 +2523,11 @@ SVfrQuestionNode::~SVfrQuestionNode (
)
{
if (mName != NULL) {
- delete mName;
+ delete[] mName;
}
if (mVarIdStr != NULL) {
- delete mVarIdStr;
+ delete[] mVarIdStr;
}
}
@@ -3387,7 +3387,7 @@ CVfrStringDB::GetVarStoreNameFormStringId (
// Check the String package.
//
if (PkgHeader->Header.Type != EFI_HII_PACKAGE_STRINGS) {
- delete StringPtr;
+ delete[] StringPtr;
return NULL;
}
@@ -3414,7 +3414,7 @@ CVfrStringDB::GetVarStoreNameFormStringId (
//
Status = FindStringBlock(Current, StringId, &NameOffset, &BlockType);
if (Status != EFI_SUCCESS) {
- delete StringPtr;
+ delete[] StringPtr;
return NULL;
}
@@ -3447,7 +3447,7 @@ CVfrStringDB::GetVarStoreNameFormStringId (
break;
}
- delete StringPtr;
+ delete[] StringPtr;
return VarStoreName;
}
diff --git a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
index 5faa1f40fd..35d17a031b 100644
--- a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
+++ b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
@@ -33,6 +33,8 @@ extern BOOLEAN VfrCompatibleMode;
#define EFI_BITS_PER_UINT32 (1 << EFI_BITS_SHIFT_PER_UINT32)
#define BUFFER_SAFE_FREE(Buf) do { if ((Buf) != NULL) { delete (Buf); } } while (0);
+#define ARRAY_SAFE_FREE(Buf) do { if ((Buf) != NULL) { delete[] (Buf); } } while (0);
+
class CVfrBinaryOutput {
public:
@@ -139,7 +141,7 @@ struct SVfrPackStackNode {
~SVfrPackStackNode (VOID) {
if (mIdentifier != NULL) {
- delete mIdentifier;
+ delete[] mIdentifier;
}
mNext = NULL;
}