diff options
author | Dandan Bi <dandan.bi@intel.com> | 2018-04-10 09:35:32 +0800 |
---|---|---|
committer | Liming Gao <liming.gao@intel.com> | 2018-04-17 16:57:00 +0800 |
commit | 2aa9a9f03efe31c9646331e009c8d2cb304594b3 (patch) | |
tree | 91e83467ddb9eb2c909583a750d1419102e3eb07 /BaseTools/Source | |
parent | 55f67014d7b4a1228754313917ccca5539764802 (diff) | |
download | edk2-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.g | 32 |
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;
}
|