Revision: 15071
          http://sourceforge.net/p/edk2/code/15071
Author:   jcarsey
Date:     2014-01-09 17:59:46 +0000 (Thu, 09 Jan 2014)
Log Message:
-----------
ShellPkg: Remove memory leak from file list usage

This change removes an un-used parameter that was then causing a leak since the 
memory was assumed to be used.

This also verifies that the list is freed when no longer needed.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jaben Carsey <[email protected]>
Reviewed-by: Ruiyu Ni <[email protected]>

Modified Paths:
--------------
    trunk/edk2/ShellPkg/Application/Shell/ShellProtocol.c
    trunk/edk2/ShellPkg/Application/Shell/ShellProtocol.h

Modified: trunk/edk2/ShellPkg/Application/Shell/ShellProtocol.c
===================================================================
--- trunk/edk2/ShellPkg/Application/Shell/ShellProtocol.c       2014-01-09 
16:54:13 UTC (rev 15070)
+++ trunk/edk2/ShellPkg/Application/Shell/ShellProtocol.c       2014-01-09 
17:59:46 UTC (rev 15071)
@@ -2,7 +2,7 @@
   Member functions of EFI_SHELL_PROTOCOL and functions for creation,
   manipulation, and initialization of EFI_SHELL_PROTOCOL.
 
-  Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
   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
@@ -1619,6 +1619,7 @@
     RemoveEntryList(&ShellFileListItem->Link);
     InternalFreeShellFileInfoNode(ShellFileListItem);
   }
+  InternalFreeShellFileInfoNode(*FileList);
   return(EFI_SUCCESS);
 }
 
@@ -1714,7 +1715,6 @@
 
   @param[in] BasePath         the Path to prepend onto filename for FullPath
   @param[in] Status           Status member initial value.
-  @param[in] FullName         FullName member initial value.
   @param[in] FileName         FileName member initial value.
   @param[in] Handle           Handle member initial value.
   @param[in] Info             Info struct to copy.
@@ -1727,7 +1727,6 @@
 CreateAndPopulateShellFileInfo(
   IN CONST CHAR16 *BasePath,
   IN CONST EFI_STATUS Status,
-  IN CONST CHAR16 *FullName,
   IN CONST CHAR16 *FileName,
   IN CONST SHELL_FILE_HANDLE Handle,
   IN CONST EFI_FILE_INFO *Info
@@ -1836,6 +1835,7 @@
     Size              = 0;
     TempString        = StrnCatGrow(&TempString, &Size, 
ShellFileHandleGetPath(FileDirHandle), 0);
     if (TempString == NULL) {
+      SHELL_FREE_NON_NULL(BasePath);
       return (EFI_OUT_OF_RESOURCES);
     }
     TempSpot          = StrStr(TempString, L";");
@@ -1846,8 +1846,10 @@
 
     TempString        = StrnCatGrow(&TempString, &Size, BasePath, 0);
     if (TempString == NULL) {
+      SHELL_FREE_NON_NULL(BasePath);
       return (EFI_OUT_OF_RESOURCES);
     }
+    SHELL_FREE_NON_NULL(BasePath);
     BasePath          = TempString;
   }
 
@@ -1862,20 +1864,14 @@
       ; !EFI_ERROR(Status) && !NoFile
       ; Status = FileHandleFindNextFile(FileDirHandle, FileInfo, &NoFile)
      ){
-    TempString  = NULL;
-    Size        = 0;
     //
     // allocate a new EFI_SHELL_FILE_INFO and populate it...
     //
-    ASSERT((TempString == NULL && Size == 0) || (TempString != NULL));
-    TempString = StrnCatGrow(&TempString, &Size, BasePath, 0);
-    TempString = StrnCatGrow(&TempString, &Size, FileInfo->FileName, 0);
     ShellFileListItem = CreateAndPopulateShellFileInfo(
       BasePath,
-      EFI_SUCCESS, // success since we didnt fail to open it...
-      TempString,
+      EFI_SUCCESS,  // success since we didnt fail to open it...
       FileInfo->FileName,
-      NULL, // no handle since not open
+      NULL,         // no handle since not open
       FileInfo);
 
     if (ShellFileList == NULL) {

Modified: trunk/edk2/ShellPkg/Application/Shell/ShellProtocol.h
===================================================================
--- trunk/edk2/ShellPkg/Application/Shell/ShellProtocol.h       2014-01-09 
16:54:13 UTC (rev 15070)
+++ trunk/edk2/ShellPkg/Application/Shell/ShellProtocol.h       2014-01-09 
17:59:46 UTC (rev 15071)
@@ -2,7 +2,7 @@
   Member functions of EFI_SHELL_PROTOCOL and functions for creation,
   manipulation, and initialization of EFI_SHELL_PROTOCOL.
 
-  Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
   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
@@ -555,7 +555,6 @@
 
   @param[in] BasePath         the Path to prepend onto filename for FullPath
   @param[in] Status           Status member initial value.
-  @param[in] FullName         FullName member initial value.
   @param[in] FileName         FileName member initial value.
   @param[in] Handle           Handle member initial value.
   @param[in] Info             Info struct to copy.
@@ -566,7 +565,6 @@
 CreateAndPopulateShellFileInfo(
   IN CONST CHAR16 *BasePath,
   IN CONST EFI_STATUS Status,
-  IN CONST CHAR16 *FullName,
   IN CONST CHAR16 *FileName,
   IN CONST SHELL_FILE_HANDLE Handle,
   IN CONST EFI_FILE_INFO *Info

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to