Revision: 19647
http://sourceforge.net/p/edk2/code/19647
Author: dandanbi
Date: 2016-01-15 09:50:40 +0000 (Fri, 15 Jan 2016)
Log Message:
-----------
MdeModulePkg:Fix the potential memory leak issue in Display Engine
The MenuOption insert to gMenuOption allocate memory every time,but not free.
Now add the code to free it.And for Date/Time,it will create 3 menus,but
previously
the Description point to the same address,so when free the Description,it will
cause
issue,now reset the Description pointer.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <[email protected]>
Reviewed-by: Eric Dong <[email protected]>
Reviewed-by: Liming Gao <[email protected]>
Modified Paths:
--------------
trunk/edk2/MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.c
Modified: trunk/edk2/MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.c
2016-01-15 05:26:04 UTC (rev 19646)
+++ trunk/edk2/MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.c
2016-01-15 09:50:40 UTC (rev 19647)
@@ -1,7 +1,7 @@
/** @file
Entry and initialization module for the browser.
-Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2014, Hewlett-Packard Development Company, L.P.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
@@ -604,7 +604,6 @@
UI_MENU_OPTION *MenuOption;
UINTN Index;
UINTN Count;
- CHAR16 *String;
UINT16 NumberOfLines;
UINT16 GlyphWidth;
UINT16 Width;
@@ -621,9 +620,6 @@
PromptId = GetPrompt (Statement->OpCode);
ASSERT (PromptId != 0);
- String = GetToken (PromptId, gFormData->HiiHandle);
- ASSERT (String != NULL);
-
if (Statement->OpCode->OpCode == EFI_IFR_DATE_OP ||
Statement->OpCode->OpCode == EFI_IFR_TIME_OP) {
Count = 3;
}
@@ -633,7 +629,7 @@
ASSERT (MenuOption);
MenuOption->Signature = UI_MENU_OPTION_SIGNATURE;
- MenuOption->Description = String;
+ MenuOption->Description = GetToken (PromptId, gFormData->HiiHandle);
MenuOption->Handle = gFormData->HiiHandle;
MenuOption->ThisTag = Statement;
MenuOption->NestInStatement = NestIn;
@@ -697,11 +693,11 @@
(Statement->OpCode->OpCode != EFI_IFR_DATE_OP) &&
(Statement->OpCode->OpCode != EFI_IFR_TIME_OP)) {
Width = GetWidth (MenuOption, NULL);
- for (; GetLineByWidth (String, Width, &GlyphWidth,&ArrayEntry,
&OutputString) != 0x0000;) {
+ for (; GetLineByWidth (MenuOption->Description, Width,
&GlyphWidth,&ArrayEntry, &OutputString) != 0x0000;) {
//
// If there is more string to process print on the next row and
increment the Skip value
//
- if (StrLen (&String[ArrayEntry]) != 0) {
+ if (StrLen (&MenuOption->Description[ArrayEntry]) != 0) {
NumberOfLines++;
}
FreePool (OutputString);
@@ -3730,7 +3726,36 @@
}
/**
+ Free the UI Menu Option structure data.
+ @param MenuOptionList Point to the menu option list which need to
be free.
+
+**/
+
+VOID
+FreeMenuOptionData(
+ LIST_ENTRY *MenuOptionList
+ )
+{
+ LIST_ENTRY *Link;
+ UI_MENU_OPTION *Option;
+
+ //
+ // Free menu option list
+ //
+ while (!IsListEmpty (MenuOptionList)) {
+ Link = GetFirstNode (MenuOptionList);
+ Option = MENU_OPTION_FROM_LINK (Link);
+ if (Option->Description != NULL){
+ FreePool(Option->Description);
+ }
+ RemoveEntryList (&Option->Link);
+ FreePool (Option);
+ }
+}
+
+/**
+
Base on the browser status info to show an pop up message.
**/
@@ -4001,6 +4026,11 @@
CopyGuid (&gOldFormEntry.FormSetGuid, &FormData->FormSetGuid);
gOldFormEntry.FormId = FormData->FormId;
+ //
+ //Free the Ui menu option list.
+ //
+ FreeMenuOptionData(&gMenuOption);
+
return Status;
}
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits