Revision: 19403
          http://sourceforge.net/p/edk2/code/19403
Author:   vanjeff
Date:     2015-12-18 07:35:18 +0000 (Fri, 18 Dec 2015)
Log Message:
-----------
ShellPkg: Corrected CatSPrint usage to prevent memory leaks.

CatSPrint allocates return buffer for the caller. The caller doesn't have to 
allocate one, and has to free the used buffers.

(Sync patch r18902 from main trunk.)

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Cecil Sheng <[email protected]>
Reviewed-by: Qiu Shumin <[email protected]>
Reviewed-by: Jaben Carsey <[email protected]>

Revision Links:
--------------
    http://sourceforge.net/p/edk2/code/18902

Modified Paths:
--------------
    
branches/UDK2015/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c

Modified: 
branches/UDK2015/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
===================================================================
--- 
branches/UDK2015/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c   
    2015-12-18 07:34:43 UTC (rev 19402)
+++ 
branches/UDK2015/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c   
    2015-12-18 07:35:18 UTC (rev 19403)
@@ -1,6 +1,7 @@
 /** @file
   Provides interface to advanced shell functionality for parsing both handle 
and protocol database.
 
+  (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
   (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
   Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
   This program and the accompanying materials
@@ -108,9 +109,9 @@
   return (EFI_SUCCESS);
 }
 
-/** 
+/**
   Initialization function for HII packages.
- 
+
 **/
 VOID
 HandleParsingHiiInit (VOID)
@@ -180,10 +181,7 @@
   HandleParsingHiiInit();
 
   Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_LI_DUMP_MAIN), 
NULL);
-  RetVal = AllocateZeroPool (PcdGet16 (PcdShellPrintBufferSize));
-  if (Temp == NULL || RetVal == NULL) {
-    SHELL_FREE_NON_NULL(Temp);
-    SHELL_FREE_NON_NULL(RetVal);
+  if (Temp == NULL) {
     return NULL;
   }
 
@@ -198,29 +196,30 @@
 
   if (EFI_ERROR (Status)) {
     SHELL_FREE_NON_NULL (Temp);
-    SHELL_FREE_NON_NULL (RetVal);
     return NULL;
   }
 
   DataType = ConvertMemoryType(LoadedImage->ImageDataType);
   CodeType = ConvertMemoryType(LoadedImage->ImageCodeType);
 
-  RetVal = CatSPrint(RetVal,
-                      Temp,
-                      LoadedImage->Revision,
-                      LoadedImage->ParentHandle,
-                      LoadedImage->SystemTable,
-                      LoadedImage->DeviceHandle,
-                      LoadedImage->FilePath,
-                      LoadedImage->LoadOptionsSize,
-                      LoadedImage->LoadOptions,
-                      LoadedImage->ImageBase,
-                      LoadedImage->ImageSize,
-                      CodeType,
-                      DataType,
-                      LoadedImage->Unload);
+  RetVal = CatSPrint(
+             NULL,
+             Temp,
+             LoadedImage->Revision,
+             LoadedImage->ParentHandle,
+             LoadedImage->SystemTable,
+             LoadedImage->DeviceHandle,
+             LoadedImage->FilePath,
+             LoadedImage->LoadOptionsSize,
+             LoadedImage->LoadOptions,
+             LoadedImage->ImageBase,
+             LoadedImage->ImageSize,
+             CodeType,
+             DataType,
+             LoadedImage->Unload
+             );
 
-  
+
   SHELL_FREE_NON_NULL(Temp);
   SHELL_FREE_NON_NULL(CodeType);
   SHELL_FREE_NON_NULL(DataType);
@@ -258,10 +257,7 @@
   HandleParsingHiiInit();
 
   Temp = HiiGetString(mHandleParsingHiiHandle, 
STRING_TOKEN(STR_GOP_DUMP_MAIN), NULL);
-  RetVal = AllocateZeroPool (PcdGet16 (PcdShellPrintBufferSize));
-  if (Temp == NULL || RetVal == NULL) {
-    SHELL_FREE_NON_NULL(Temp);
-    SHELL_FREE_NON_NULL(RetVal);
+  if (Temp == NULL) {
     return NULL;
   }
 
@@ -276,29 +272,29 @@
 
   if (EFI_ERROR (Status)) {
     SHELL_FREE_NON_NULL (Temp);
-    SHELL_FREE_NON_NULL (RetVal);
     return NULL;
   }
 
   Fmt = ConvertPixelFormat(GraphicsOutput->Mode->Info->PixelFormat);
 
-  RetVal = CatSPrint(RetVal,
-                      Temp,
-                      GraphicsOutput->Mode->MaxMode,
-                      GraphicsOutput->Mode->Mode,
-                      GraphicsOutput->Mode->FrameBufferBase,
-                      (UINT64)GraphicsOutput->Mode->FrameBufferSize,
-                      (UINT64)GraphicsOutput->Mode->SizeOfInfo,
-                      GraphicsOutput->Mode->Info->Version,
-                      GraphicsOutput->Mode->Info->HorizontalResolution,
-                      GraphicsOutput->Mode->Info->VerticalResolution,
-                      Fmt,
-                      GraphicsOutput->Mode->Info->PixelsPerScanLine,
-                      
GraphicsOutput->Mode->Info->PixelFormat!=PixelBitMask?0:GraphicsOutput->Mode->Info->PixelInformation.RedMask,
-                      
GraphicsOutput->Mode->Info->PixelFormat!=PixelBitMask?0:GraphicsOutput->Mode->Info->PixelInformation.GreenMask,
-                      
GraphicsOutput->Mode->Info->PixelFormat!=PixelBitMask?0:GraphicsOutput->Mode->Info->PixelInformation.BlueMask
-                      );
-  
+  RetVal = CatSPrint(
+             NULL,
+             Temp,
+             GraphicsOutput->Mode->MaxMode,
+             GraphicsOutput->Mode->Mode,
+             GraphicsOutput->Mode->FrameBufferBase,
+             (UINT64)GraphicsOutput->Mode->FrameBufferSize,
+             (UINT64)GraphicsOutput->Mode->SizeOfInfo,
+             GraphicsOutput->Mode->Info->Version,
+             GraphicsOutput->Mode->Info->HorizontalResolution,
+             GraphicsOutput->Mode->Info->VerticalResolution,
+             Fmt,
+             GraphicsOutput->Mode->Info->PixelsPerScanLine,
+             
GraphicsOutput->Mode->Info->PixelFormat!=PixelBitMask?0:GraphicsOutput->Mode->Info->PixelInformation.RedMask,
+             
GraphicsOutput->Mode->Info->PixelFormat!=PixelBitMask?0:GraphicsOutput->Mode->Info->PixelInformation.GreenMask,
+             
GraphicsOutput->Mode->Info->PixelFormat!=PixelBitMask?0:GraphicsOutput->Mode->Info->PixelInformation.BlueMask
+             );
+
   SHELL_FREE_NON_NULL(Temp);
   SHELL_FREE_NON_NULL(Fmt);
 
@@ -356,7 +352,7 @@
   FreePool(Temp);
   RetVal = Temp2;
   Temp2 = NULL;
- 
+
   Temp = HiiGetString(mHandleParsingHiiHandle, 
STRING_TOKEN(STR_PCIRB_DUMP_SEG), NULL);
   if (Temp == NULL) {
     SHELL_FREE_NON_NULL(RetVal);
@@ -376,13 +372,13 @@
     if (Temp == NULL) {
       SHELL_FREE_NON_NULL(RetVal);
       return NULL;
-    }    
+    }
     Temp2 = CatSPrint(RetVal, Temp, Attributes);
     FreePool(Temp);
     FreePool(RetVal);
     RetVal = Temp2;
     Temp2 = NULL;
-    
+
     Temp = HiiGetString(mHandleParsingHiiHandle, 
STRING_TOKEN(STR_PCIRB_DUMP_SUPPORTS), NULL);
     if (Temp == NULL) {
       SHELL_FREE_NON_NULL(RetVal);
@@ -429,7 +425,7 @@
         Temp2 = NULL;
       }
 
-      Temp2 = CatSPrint(RetVal, 
+      Temp2 = CatSPrint(RetVal,
         L"%H%02x    %016lx  %016lx  %02x%N\r\n",
         Configuration->SpecificFlag,
         Configuration->AddrRangeMin,
@@ -618,24 +614,18 @@
   CHAR16                            *GuidStr;
   CHAR16                            *TempStr;
   CHAR16                            *RetVal;
+  CHAR16                            *TempRetVal;
   VOID                              *InformationBlock;
   UINTN                             InformationBlockSize;
-   
+
   if (!Verbose) {
     return (CatSPrint(NULL, L"AdapterInfo"));
   }
 
   InfoTypesBuffer   = NULL;
   InformationBlock  = NULL;
-  
-  //
-  // Allocate print buffer to store data
-  //
-  RetVal = AllocateZeroPool (PcdGet16(PcdShellPrintBufferSize));
-  if (RetVal == NULL) {
-    return NULL;
-  }
 
+
   Status = gBS->OpenProtocol (
                   (EFI_HANDLE) (TheHandle),
                   &gEfiAdapterInformationProtocolGuid,
@@ -646,7 +636,6 @@
                   );
 
   if (EFI_ERROR (Status)) {
-    SHELL_FREE_NON_NULL (RetVal);
     return NULL;
   }
 
@@ -655,22 +644,23 @@
   //
   Status = EfiAdptrInfoProtocol->GetSupportedTypes (
                                    EfiAdptrInfoProtocol,
-                                   &InfoTypesBuffer, 
+                                   &InfoTypesBuffer,
                                    &InfoTypesBufferCount
                                    );
+  RetVal = NULL;
   if (EFI_ERROR (Status)) {
     TempStr = HiiGetString (mHandleParsingHiiHandle, 
STRING_TOKEN(STR_GET_SUPP_TYPES_FAILED), NULL);
     if (TempStr != NULL) {
-      RetVal = CatSPrint (RetVal, TempStr, Status);
+      RetVal = CatSPrint (NULL, TempStr, Status);
     } else {
       goto ERROR_EXIT;
-    }  
+    }
   } else {
     TempStr = HiiGetString (mHandleParsingHiiHandle, 
STRING_TOKEN(STR_SUPP_TYPE_HEADER), NULL);
     if (TempStr == NULL) {
       goto ERROR_EXIT;
     }
-    RetVal = CatSPrint (RetVal, TempStr);
+    RetVal = CatSPrint (NULL, TempStr);
     SHELL_FREE_NON_NULL (TempStr);
 
     for (GuidIndex = 0; GuidIndex < InfoTypesBufferCount; GuidIndex++) {
@@ -678,7 +668,9 @@
       if (TempStr == NULL) {
         goto ERROR_EXIT;
       }
-      RetVal = CatSPrint (RetVal, TempStr, (GuidIndex + 1), 
InfoTypesBuffer[GuidIndex]);
+      TempRetVal = CatSPrint (RetVal, TempStr, (GuidIndex + 1), 
InfoTypesBuffer[GuidIndex]);
+      SHELL_FREE_NON_NULL (RetVal);
+      RetVal = TempRetVal;
       SHELL_FREE_NON_NULL (TempStr);
 
       TempStr = HiiGetString (mHandleParsingHiiHandle, 
STRING_TOKEN(STR_GUID_STRING), NULL);
@@ -687,32 +679,42 @@
       }
 
       if (CompareGuid (&InfoTypesBuffer[GuidIndex], 
&gEfiAdapterInfoMediaStateGuid)) {
-        RetVal = CatSPrint (RetVal, TempStr, L"gEfiAdapterInfoMediaStateGuid");
+        TempRetVal = CatSPrint (RetVal, TempStr, 
L"gEfiAdapterInfoMediaStateGuid");
+        SHELL_FREE_NON_NULL (RetVal);
+        RetVal = TempRetVal;
       } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], 
&gEfiAdapterInfoNetworkBootGuid)) {
-        RetVal = CatSPrint (RetVal, TempStr, 
L"gEfiAdapterInfoNetworkBootGuid");
+        TempRetVal = CatSPrint (RetVal, TempStr, 
L"gEfiAdapterInfoNetworkBootGuid");
+        SHELL_FREE_NON_NULL (RetVal);
+        RetVal = TempRetVal;
       } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], 
&gEfiAdapterInfoSanMacAddressGuid)) {
-        RetVal = CatSPrint (RetVal, TempStr, 
L"gEfiAdapterInfoSanMacAddressGuid");
+        TempRetVal = CatSPrint (RetVal, TempStr, 
L"gEfiAdapterInfoSanMacAddressGuid");
+        SHELL_FREE_NON_NULL (RetVal);
+        RetVal = TempRetVal;
       } else {
 
         GuidStr = GetStringNameFromGuid (&InfoTypesBuffer[GuidIndex], NULL);
-       
+
         if (GuidStr != NULL) {
           if (StrCmp(GuidStr, L"UnknownDevice") == 0) {
-            RetVal = CatSPrint (RetVal, TempStr, L"UnknownInfoType");
-            
+            TempRetVal = CatSPrint (RetVal, TempStr, L"UnknownInfoType");
+            SHELL_FREE_NON_NULL (RetVal);
+            RetVal = TempRetVal;
+
             SHELL_FREE_NON_NULL (TempStr);
             SHELL_FREE_NON_NULL(GuidStr);
             //
             // So that we never have to pass this UnknownInfoType to the 
parsing function "GetInformation" service of AIP
             //
-            continue; 
+            continue;
           } else {
-            RetVal = CatSPrint (RetVal, TempStr, GuidStr);
+            TempRetVal = CatSPrint (RetVal, TempStr, GuidStr);
+            SHELL_FREE_NON_NULL (RetVal);
+            RetVal = TempRetVal;
             SHELL_FREE_NON_NULL(GuidStr);
           }
         }
       }
-      
+
       SHELL_FREE_NON_NULL (TempStr);
 
       Status = EfiAdptrInfoProtocol->GetInformation (
@@ -727,57 +729,67 @@
         if (TempStr == NULL) {
           goto ERROR_EXIT;
         }
-        RetVal = CatSPrint (RetVal, TempStr, Status);
+        TempRetVal = CatSPrint (RetVal, TempStr, Status);
+        SHELL_FREE_NON_NULL (RetVal);
+        RetVal = TempRetVal;
       } else {
         if (CompareGuid (&InfoTypesBuffer[GuidIndex], 
&gEfiAdapterInfoMediaStateGuid)) {
           TempStr = HiiGetString (mHandleParsingHiiHandle, 
STRING_TOKEN(STR_MEDIA_STATE), NULL);
           if (TempStr == NULL) {
             goto ERROR_EXIT;
           }
-          RetVal = CatSPrint (
-                     RetVal,
-                     TempStr,
-                     ((EFI_ADAPTER_INFO_MEDIA_STATE 
*)InformationBlock)->MediaState,
-                     ((EFI_ADAPTER_INFO_MEDIA_STATE 
*)InformationBlock)->MediaState
-                     );
+          TempRetVal = CatSPrint (
+                         RetVal,
+                         TempStr,
+                         ((EFI_ADAPTER_INFO_MEDIA_STATE 
*)InformationBlock)->MediaState,
+                         ((EFI_ADAPTER_INFO_MEDIA_STATE 
*)InformationBlock)->MediaState
+                         );
+          SHELL_FREE_NON_NULL (RetVal);
+          RetVal = TempRetVal;
         } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], 
&gEfiAdapterInfoNetworkBootGuid)) {
           TempStr = HiiGetString (mHandleParsingHiiHandle, 
STRING_TOKEN(STR_NETWORK_BOOT_INFO), NULL);
           if (TempStr == NULL) {
             goto ERROR_EXIT;
           }
-          RetVal = CatSPrint (
-                     RetVal,
-                     TempStr,
-                     ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->iScsiIpv4BootCapablity,
-                     ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->iScsiIpv6BootCapablity, 
-                     ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->FCoeBootCapablity, 
-                     ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->OffloadCapability, 
-                     ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->iScsiMpioCapability, 
-                     ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->iScsiIpv4Boot, 
-                     ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->iScsiIpv6Boot,
-                     ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->FCoeBoot
-                     );
-        } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], 
&gEfiAdapterInfoSanMacAddressGuid) == TRUE) { 
+          TempRetVal = CatSPrint (
+                         RetVal,
+                         TempStr,
+                         ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->iScsiIpv4BootCapablity,
+                         ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->iScsiIpv6BootCapablity,
+                         ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->FCoeBootCapablity,
+                         ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->OffloadCapability,
+                         ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->iScsiMpioCapability,
+                         ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->iScsiIpv4Boot,
+                         ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->iScsiIpv6Boot,
+                         ((EFI_ADAPTER_INFO_NETWORK_BOOT 
*)InformationBlock)->FCoeBoot
+                         );
+          SHELL_FREE_NON_NULL (RetVal);
+          RetVal = TempRetVal;
+        } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], 
&gEfiAdapterInfoSanMacAddressGuid) == TRUE) {
           TempStr = HiiGetString (mHandleParsingHiiHandle, 
STRING_TOKEN(STR_SAN_MAC_ADDRESS_INFO), NULL);
           if (TempStr == NULL) {
             goto ERROR_EXIT;
           }
-          RetVal = CatSPrint (
-                     RetVal,
-                     TempStr,
-                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS 
*)InformationBlock)->SanMacAddress.Addr[0], 
-                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS 
*)InformationBlock)->SanMacAddress.Addr[1], 
-                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS 
*)InformationBlock)->SanMacAddress.Addr[2],
-                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS 
*)InformationBlock)->SanMacAddress.Addr[3], 
-                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS 
*)InformationBlock)->SanMacAddress.Addr[4], 
-                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS 
*)InformationBlock)->SanMacAddress.Addr[5]
-                     );   
+          TempRetVal = CatSPrint (
+                         RetVal,
+                         TempStr,
+                         ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS 
*)InformationBlock)->SanMacAddress.Addr[0],
+                         ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS 
*)InformationBlock)->SanMacAddress.Addr[1],
+                         ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS 
*)InformationBlock)->SanMacAddress.Addr[2],
+                         ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS 
*)InformationBlock)->SanMacAddress.Addr[3],
+                         ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS 
*)InformationBlock)->SanMacAddress.Addr[4],
+                         ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS 
*)InformationBlock)->SanMacAddress.Addr[5]
+                         );
+          SHELL_FREE_NON_NULL (RetVal);
+          RetVal = TempRetVal;
         } else {
           TempStr = HiiGetString (mHandleParsingHiiHandle, 
STRING_TOKEN(STR_UNKNOWN_INFO_TYPE), NULL);
           if (TempStr == NULL) {
             goto ERROR_EXIT;
           }
-          RetVal = CatSPrint (RetVal, TempStr, &InfoTypesBuffer[GuidIndex]);
+          TempRetVal = CatSPrint (RetVal, TempStr, 
&InfoTypesBuffer[GuidIndex]);
+          SHELL_FREE_NON_NULL (RetVal);
+          RetVal = TempRetVal;
         }
       }
       SHELL_FREE_NON_NULL (TempStr);
@@ -821,7 +833,7 @@
 #define LOCAL_EFI_ISA_IO_PROTOCOL_GUID \
   { \
   0x7ee2bd44, 0x3da0, 0x11d4, { 0x9a, 0x38, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d 
} \
-  } 
+  }
 #define LOCAL_EFI_ISA_ACPI_PROTOCOL_GUID \
   { \
   0x64a892dc, 0x5561, 0x4536, { 0x92, 0xc7, 0x79, 0x9b, 0xfc, 0x18, 0x33, 0x55 
} \
@@ -1290,9 +1302,9 @@
 
 /**
   Get best support language for this driver.
-  
-  First base on the user input language  to search, second base on the current 
-  platform used language to search, third get the first language from the 
+
+  First base on the user input language  to search, second base on the current
+  platform used language to search, third get the first language from the
   support language list. The caller need to free the buffer of the best 
language.
 
   @param[in] SupportedLanguages      The support languages for this driver.
@@ -1690,7 +1702,7 @@
 
       if (ControllerHandle == NULL) {
         //
-        // ControllerHandle == NULL and DriverBindingHandle != NULL.  
+        // ControllerHandle == NULL and DriverBindingHandle != NULL.
         // Return information on all the controller handles that the driver 
specified by DriverBindingHandle is managing
         //
         for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; 
OpenInfoIndex++) {


------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to