From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 01CB081D98 for ; Thu, 3 Nov 2016 00:23:49 -0700 (PDT) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP; 03 Nov 2016 00:23:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,585,1473145200"; d="scan'208";a="897185171" Received: from shwdeopenpsi014.ccr.corp.intel.com ([10.239.9.34]) by orsmga003.jf.intel.com with ESMTP; 03 Nov 2016 00:23:50 -0700 From: Hao Wu To: edk2-devel@lists.01.org Cc: Hao Wu , Liming Gao , Yonghong Zhu , Eric Dong , Dandan Bi Date: Thu, 3 Nov 2016 15:22:36 +0800 Message-Id: <1478157783-9368-27-git-send-email-hao.a.wu@intel.com> X-Mailer: git-send-email 1.9.5.msysgit.0 In-Reply-To: <1478157783-9368-1-git-send-email-hao.a.wu@intel.com> References: <1478157783-9368-1-git-send-email-hao.a.wu@intel.com> Subject: [PATCH v2 26/53] BaseTools/VfrCompile: Avoid freeing memory with mismatched functions X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Nov 2016 07:23:50 -0000 Memory allocated by operator new[] should be freed using delete[] to avoid possible memory leak. Cc: Liming Gao Cc: Yonghong Zhu Cc: Eric Dong Cc: Dandan Bi Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu --- BaseTools/Source/C/VfrCompile/VfrCompiler.cpp | 4 ++-- BaseTools/Source/C/VfrCompile/VfrError.cpp | 4 ++-- BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp | 6 +++--- BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp | 24 ++++++++++++------------ BaseTools/Source/C/VfrCompile/VfrUtilityLib.h | 4 +++- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp b/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp index 1645343..1bca372 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 3c506ec..285e175 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.
+Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.
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 124b8e8..9c76b29 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 24b0bfa..1afa5a2 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 5faa1f4..35d17a0 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; } -- 1.9.5.msysgit.0