Revision: 17782 http://sourceforge.net/p/edk2/code/17782 Author: shenshushi Date: 2015-07-01 08:21:16 +0000 (Wed, 01 Jul 2015) Log Message: ----------- 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> Reviewed-by: Ruiyu Ni <ruiyu...@intel.com> Modified Paths: -------------- trunk/edk2/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c trunk/edk2/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c Modified: trunk/edk2/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c =================================================================== --- trunk/edk2/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c 2015-07-01 08:19:56 UTC (rev 17781) +++ trunk/edk2/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c 2015-07-01 08:21:16 UTC (rev 17782) @@ -552,6 +552,7 @@ CHAR16 *SerialNumber; CHAR16 *Description; EFI_USB_DEVICE_DESCRIPTOR DevDesc; + UINTN DescMaxSize; Status = gBS->HandleProtocol ( Handle, @@ -606,15 +607,16 @@ 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 @@ // 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; Modified: trunk/edk2/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c =================================================================== --- trunk/edk2/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c 2015-07-01 08:19:56 UTC (rev 17781) +++ trunk/edk2/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c 2015-07-01 08:21:16 UTC (rev 17782) @@ -26,12 +26,14 @@ @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 @@ UINTN EndIndex; if (PdbFileName == NULL) { - AsciiStrCpy (GaugeString, " "); + AsciiStrCpyS (GaugeString, StringSize, " "); } else { StartIndex = 0; for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++) @@ -78,12 +80,14 @@ @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 @@ CHAR8 *PdbFileName; EFI_DRIVER_BINDING_PROTOCOL *DriverBinding; - AsciiStrCpy (GaugeString, " "); + AsciiStrCpyS (GaugeString, StringSize, " "); // // Get handle name from image protocol @@ -127,7 +131,7 @@ PdbFileName = PeCoffLoaderGetPdbPointer (Image->ImageBase); if (PdbFileName != NULL) { - BmGetShortPdbFileName (PdbFileName, GaugeString); + BmGetShortPdbFileName (PdbFileName, GaugeString, StringSize); } return ; @@ -285,9 +289,9 @@ 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 @@ ZeroMem (&mBmPerfData, sizeof (PERF_DATA)); - AsciiStrnCpy (mBmPerfData.Token, Token, PERF_TOKEN_LENGTH); + AsciiStrCpyS (mBmPerfData.Token, PERF_TOKEN_SIZE, Token); if (StartTicker == 1) { StartTicker = StartValue; } ------------------------------------------------------------------------------ Don't Limit Your Business. Reach for the Cloud. GigeNET's Cloud Solutions provide you with the tools and support that you need to offload your IT needs and focus on growing your business. Configured For All Businesses. Start Your Cloud Today. https://www.gigenetcloud.com/ _______________________________________________ edk2-commits mailing list edk2-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-commits