Cc: Eric Dong <[email protected]>
Cc: Liming Gao <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Dandan Bi <[email protected]>
---
BaseTools/Source/C/VfrCompile/VfrSyntax.g | 32 ++++++++++++++++++++++++++++++-
1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/BaseTools/Source/C/VfrCompile/VfrSyntax.g
b/BaseTools/Source/C/VfrCompile/VfrSyntax.g
index d48072a8adf..4b0a43606ea 100644
--- a/BaseTools/Source/C/VfrCompile/VfrSyntax.g
+++ b/BaseTools/Source/C/VfrCompile/VfrSyntax.g
@@ -4103,10 +4103,11 @@ vfrStatementExpression [UINT32 RootLevel, UINT32
ExpOpCount = 0] :
}
}
}
if ($RootLevel == 0)
{
+ _CLEAR_SAVED_OPHDR
();
mCIfrOpHdrIndex --;
}
>>
;
@@ -4387,10 +4388,16 @@ vareqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
">"
V5:Number << ConstVal =
_STOU16(V5->getText(), V5->getLine()); >>
<< IdEqValDoSpecial
($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_THAN); >>
)
)
+ <<
+ if (VarIdStr != NULL) {
+ delete[] VarIdStr;
+ VarIdStr = NULL;
+ }
+ >>
;
ideqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
<<
EFI_QUESTION_ID QId;
@@ -4440,10 +4447,16 @@ ideqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
">"
V5:Number << ConstVal =
_STOU16(V5->getText(), V5->getLine()); >>
<< IdEqValDoSpecial
($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_THAN); >>
)
)
+ <<
+ if (VarIdStr != NULL) {
+ delete[] VarIdStr;
+ VarIdStr = NULL;
+ }
+ >>
;
ideqidExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
<<
EFI_QUESTION_ID QId[2];
@@ -4492,10 +4505,20 @@ ideqidExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
">"
vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]
<< 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] :
<<
UINT16 ListLen = 0;
@@ -4531,10 +4554,14 @@ ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount]
:
if (QId ==
EFI_QUESTION_ID_INVALID) {
EILObj.SetQuestionId (QId, VarIdStr, LineNo);
}
$ExpOpCount++;
}
+ if (VarIdStr !=
NULL) {
+ delete[] VarIdStr;
+ VarIdStr = NULL;
+ }
>>
;
questionref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
<<
@@ -5055,11 +5082,14 @@ EfiVfrParser::_SAVE_OPHDR_COND (
VOID
EfiVfrParser::_CLEAR_SAVED_OPHDR (
VOID
)
{
- mCIfrOpHdr[mCIfrOpHdrIndex] = NULL;
+ if (mCIfrOpHdr[mCIfrOpHdrIndex] != NULL) {
+ delete mCIfrOpHdr[mCIfrOpHdrIndex];
+ mCIfrOpHdr[mCIfrOpHdrIndex] = NULL;
+ }
mCIfrOpHdrLineNo[mCIfrOpHdrIndex] = 0;
}
BOOLEAN
EfiVfrParser::_SET_SAVED_OPHDR_SCOPE (
--
2.14.3.windows.1
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel