summaryrefslogtreecommitdiffstats
path: root/BaseTools/Source
diff options
context:
space:
mode:
authorDandan Bi <dandan.bi@intel.com>2018-04-10 09:35:32 +0800
committerLiming Gao <liming.gao@intel.com>2018-04-17 16:57:00 +0800
commit2aa9a9f03efe31c9646331e009c8d2cb304594b3 (patch)
tree91e83467ddb9eb2c909583a750d1419102e3eb07 /BaseTools/Source
parent55f67014d7b4a1228754313917ccca5539764802 (diff)
downloadedk2-2aa9a9f03efe31c9646331e009c8d2cb304594b3.tar.gz
edk2-2aa9a9f03efe31c9646331e009c8d2cb304594b3.tar.bz2
edk2-2aa9a9f03efe31c9646331e009c8d2cb304594b3.zip
BaseTools/VfrCompile:Fix memory leak issues
Cc: Eric Dong <eric.dong@intel.com> Cc: Liming Gao <liming.gao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Eric Dong <eric.dong@intel.com>
Diffstat (limited to 'BaseTools/Source')
-rw-r--r--BaseTools/Source/C/VfrCompile/VfrSyntax.g32
1 files changed, 31 insertions, 1 deletions
diff --git a/BaseTools/Source/C/VfrCompile/VfrSyntax.g b/BaseTools/Source/C/VfrCompile/VfrSyntax.g
index d48072a8ad..4b0a43606e 100644
--- a/BaseTools/Source/C/VfrCompile/VfrSyntax.g
+++ b/BaseTools/Source/C/VfrCompile/VfrSyntax.g
@@ -4105,6 +4105,7 @@ vfrStatementExpression [UINT32 RootLevel, UINT32 ExpOpCount = 0] :
}
if ($RootLevel == 0) {
+ _CLEAR_SAVED_OPHDR ();
mCIfrOpHdrIndex --;
}
>>
@@ -4389,6 +4390,12 @@ vareqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
<< IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_THAN); >>
)
)
+ <<
+ if (VarIdStr != NULL) {
+ delete[] VarIdStr;
+ VarIdStr = NULL;
+ }
+ >>
;
ideqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
@@ -4442,6 +4449,12 @@ ideqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
<< IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_THAN); >>
)
)
+ <<
+ if (VarIdStr != NULL) {
+ delete[] VarIdStr;
+ VarIdStr = NULL;
+ }
+ >>
;
ideqidExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
@@ -4494,6 +4507,16 @@ ideqidExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
<< IdEqIdDoSpecial ($ExpOpCount, L->getLine(), QId[0], VarIdStr[0], Mask[0], QId[1], VarIdStr[1], Mask[1], GREATER_THAN); >>
)
)
+ <<
+ if (VarIdStr[0] != NULL) {
+ delete[] VarIdStr[0];
+ VarIdStr[0] = NULL;
+ }
+ if (VarIdStr[1] != NULL) {
+ delete[] VarIdStr[1];
+ VarIdStr[1] = NULL;
+ }
+ >>
;
ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
@@ -4533,6 +4556,10 @@ ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
}
$ExpOpCount++;
}
+ if (VarIdStr != NULL) {
+ delete[] VarIdStr;
+ VarIdStr = NULL;
+ }
>>
;
@@ -5057,7 +5084,10 @@ EfiVfrParser::_CLEAR_SAVED_OPHDR (
VOID
)
{
- mCIfrOpHdr[mCIfrOpHdrIndex] = NULL;
+ if (mCIfrOpHdr[mCIfrOpHdrIndex] != NULL) {
+ delete mCIfrOpHdr[mCIfrOpHdrIndex];
+ mCIfrOpHdr[mCIfrOpHdrIndex] = NULL;
+ }
mCIfrOpHdrLineNo[mCIfrOpHdrIndex] = 0;
}