Reviewed-by: Ruiyu Ni <ruiyu...@intel.com>

> -----Original Message-----
> From: Qiu, Shumin
> Sent: Thursday, June 25, 2015 3:47 PM
> To: edk2-devel@lists.sourceforge.net
> Cc: Zeng, Star; Fan, Jeff; Gao, Liming; Ni, Ruiyu; Tian, Feng
> Subject: [PATCH 06/13] MdeModulePkg/Library/UefiBootManagerLib: Use
> safe string functions to refine code.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Qiu Shumin <shumin....@intel.com>
> ---
>  MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c   | 24
> ++++++++++++++--------
>  .../Library/UefiBootManagerLib/BmPerformance.c     | 20
> ++++++++++--------
>  2 files changed, 28 insertions(+), 16 deletions(-)
> 
> diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
> b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
> index 2d3d57b..028edc3 100644
> --- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
> +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
> @@ -552,6 +552,7 @@ BmGetUsbDescription (
>    CHAR16                       *SerialNumber;
>    CHAR16                       *Description;
>    EFI_USB_DEVICE_DESCRIPTOR    DevDesc;
> +  UINTN                        DescMaxSize;
> 
>    Status = gBS->HandleProtocol (
>                    Handle,
> @@ -606,15 +607,16 @@ BmGetUsbDescription (
>      return NULL;
>    }
> 
> -  Description = AllocateZeroPool (StrSize (Manufacturer) + StrSize (Product)
> + StrSize (SerialNumber));
> +  DescMaxSize = StrSize (Manufacturer) + StrSize (Product) + StrSize
> (SerialNumber);
> +  Description = AllocateZeroPool (DescMaxSize);
>    ASSERT (Description != NULL);
> -  StrCat (Description, Manufacturer);
> -  StrCat (Description, L" ");
> +  StrCatS (Description, DescMaxSize/sizeof(CHAR16), Manufacturer);
> +  StrCatS (Description, DescMaxSize/sizeof(CHAR16), L" ");
> 
> -  StrCat (Description, Product);
> -  StrCat (Description, L" ");
> +  StrCatS (Description, DescMaxSize/sizeof(CHAR16), Product);
> +  StrCatS (Description, DescMaxSize/sizeof(CHAR16), L" ");
> 
> -  StrCat (Description, SerialNumber);
> +  StrCatS (Description, DescMaxSize/sizeof(CHAR16), SerialNumber);
> 
>    if (Manufacturer != &NullChar) {
>      FreePool (Manufacturer);
> @@ -774,8 +776,14 @@ BmGetBootDescription (
>        //
>        Temp = AllocatePool (StrSize (DefaultDescription) + sizeof
> (mBmUefiPrefix));
>        ASSERT (Temp != NULL);
> -      StrCpy (Temp, mBmUefiPrefix);
> -      StrCat (Temp, DefaultDescription);
> +      StrCpyS ( Temp,
> +                (StrSize (DefaultDescription) + sizeof
> (mBmUefiPrefix))/sizeof(CHAR16),
> +                mBmUefiPrefix
> +                );
> +      StrCatS ( Temp,
> +                (StrSize (DefaultDescription) + sizeof
> (mBmUefiPrefix))/sizeof(CHAR16),
> +                DefaultDescription
> +                );
>        FreePool (DefaultDescription);
>        DefaultDescription = Temp;
>        break;
> diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c
> b/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c
> index 32229d0..dd937a7 100644
> --- a/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c
> +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c
> @@ -26,12 +26,14 @@ EFI_PHYSICAL_ADDRESS
> mBmAcpiLowMemoryBase = 0x0FFFFFFFFULL;
> 
>    @param PdbFileName     The long PDB file name.
>    @param GaugeString     The output string to be logged by
> performance logger.
> +  @param StringSize      The buffer size of GaugeString in bytes.
> 
>  **/
>  VOID
>  BmGetShortPdbFileName (
>    IN  CONST CHAR8  *PdbFileName,
> -  OUT       CHAR8  *GaugeString
> +  OUT       CHAR8  *GaugeString,
> +  IN        UINTN   StringSize
>    )
>  {
>    UINTN Index;
> @@ -40,7 +42,7 @@ BmGetShortPdbFileName (
>    UINTN EndIndex;
> 
>    if (PdbFileName == NULL) {
> -    AsciiStrCpy (GaugeString, " ");
> +    AsciiStrCpyS (GaugeString, StringSize, " ");
>    } else {
>      StartIndex = 0;
>      for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++)
> @@ -78,12 +80,14 @@ BmGetShortPdbFileName (
> 
>    @param Handle          Driver handle.
>    @param GaugeString     The output string to be logged by
> performance logger.
> +  @param StringSize      The buffer size of GaugeString in bytes.
> 
>  **/
>  VOID
>  BmGetNameFromHandle (
>    IN  EFI_HANDLE     Handle,
> -  OUT CHAR8          *GaugeString
> +  OUT CHAR8          *GaugeString,
> +  IN  UINTN          StringSize
>    )
>  {
>    EFI_STATUS                  Status;
> @@ -91,7 +95,7 @@ BmGetNameFromHandle (
>    CHAR8                       *PdbFileName;
>    EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
> 
> -  AsciiStrCpy (GaugeString, " ");
> +  AsciiStrCpyS (GaugeString, StringSize, " ");
> 
>    //
>    // Get handle name from image protocol
> @@ -127,7 +131,7 @@ BmGetNameFromHandle (
>    PdbFileName = PeCoffLoaderGetPdbPointer (Image->ImageBase);
> 
>    if (PdbFileName != NULL) {
> -    BmGetShortPdbFileName (PdbFileName, GaugeString);
> +    BmGetShortPdbFileName (PdbFileName, GaugeString, StringSize);
>    }
> 
>    return ;
> @@ -285,9 +289,9 @@ BmWriteBootToOsPerformanceData (
> 
>      if (Duration > 0) {
> 
> -      BmGetNameFromHandle (Handles[Index], GaugeString);
> +      BmGetNameFromHandle (Handles[Index], GaugeString,
> PERF_TOKEN_LENGTH);
> 
> -      AsciiStrCpy (mBmPerfData.Token, GaugeString);
> +      AsciiStrCpyS (mBmPerfData.Token, PERF_TOKEN_SIZE, GaugeString);
>        mBmPerfData.Duration = Duration;
> 
>        CopyMem (Ptr, &mBmPerfData, sizeof (PERF_DATA));
> @@ -316,7 +320,7 @@ BmWriteBootToOsPerformanceData (
> 
>        ZeroMem (&mBmPerfData, sizeof (PERF_DATA));
> 
> -      AsciiStrnCpy (mBmPerfData.Token, Token, PERF_TOKEN_LENGTH);
> +      AsciiStrCpyS (mBmPerfData.Token, PERF_TOKEN_SIZE, Token);
>        if (StartTicker == 1) {
>          StartTicker = StartValue;
>        }
> --
> 1.9.5.msysgit.1
> 


------------------------------------------------------------------------------
Monitor 25 network devices or servers for free with OpManager!
OpManager is web-based network management software that monitors 
network devices and physical & virtual servers, alerts via email & sms 
for fault. Monitor 25 devices for free with no restriction. Download now
http://ad.doubleclick.net/ddm/clk/292181274;119417398;o
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to