Replace the unsafe string functions with the safe one in UiApp. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi <dandan...@intel.com> --- .../Application/UiApp/BootMaint/BootOption.c | 30 ++++++++++------------ .../Application/UiApp/BootMaint/FormGuid.h | 2 +- .../Application/UiApp/BootMaint/UpdatePage.c | 2 +- .../Application/UiApp/BootMaint/Variable.c | 4 +-- .../Application/UiApp/BootMngr/BootManager.c | 6 +++-- .../Application/UiApp/DeviceMngr/DeviceManager.c | 2 +- MdeModulePkg/Application/UiApp/FrontPage.c | 13 +++++----- 7 files changed, 30 insertions(+), 29 deletions(-)
diff --git a/MdeModulePkg/Application/UiApp/BootMaint/BootOption.c b/MdeModulePkg/Application/UiApp/BootMaint/BootOption.c index fa88f63..5213e3c 100644 --- a/MdeModulePkg/Application/UiApp/BootMaint/BootOption.c +++ b/MdeModulePkg/Application/UiApp/BootMaint/BootOption.c @@ -784,11 +784,11 @@ BOpt_GetBootOptions ( StringSize = StrSize((UINT16*)LoadOptionPtr); NewLoadContext->Description = AllocateZeroPool (StrSize((UINT16*)LoadOptionPtr)); ASSERT (NewLoadContext->Description != NULL); - StrCpy (NewLoadContext->Description, (UINT16*)LoadOptionPtr); + StrCpyS (NewLoadContext->Description, StrSize((UINT16*)LoadOptionPtr) / sizeof (UINT16), (UINT16*)LoadOptionPtr); ASSERT (NewLoadContext->Description != NULL); NewMenuEntry->DisplayString = NewLoadContext->Description; LoadOptionPtr += StringSize; @@ -860,31 +860,29 @@ CHAR16 * BOpt_AppendFileName ( IN CHAR16 *Str1, IN CHAR16 *Str2 ) { - UINTN Size1; - UINTN Size2; + UINTN DestMax; CHAR16 *Str; CHAR16 *TmpStr; CHAR16 *Ptr; CHAR16 *LastSlash; - Size1 = StrSize (Str1); - Size2 = StrSize (Str2); - Str = AllocateZeroPool (Size1 + Size2 + sizeof (CHAR16)); + DestMax = (StrSize (Str1) + StrSize (Str2) + sizeof (CHAR16)) / sizeof (CHAR16); + Str = AllocateZeroPool (DestMax * sizeof (CHAR16)); ASSERT (Str != NULL); - TmpStr = AllocateZeroPool (Size1 + Size2 + sizeof (CHAR16)); + TmpStr = AllocateZeroPool (DestMax * sizeof (CHAR16)); ASSERT (TmpStr != NULL); - StrCat (Str, Str1); + StrCatS (Str, DestMax, Str1); if (!((*Str == '\\') && (*(Str + 1) == 0))) { - StrCat (Str, L"\\"); + StrCatS (Str, DestMax, L"\\"); } - StrCat (Str, Str2); + StrCatS (Str, DestMax, Str2); Ptr = Str; LastSlash = Str; while (*Ptr != 0) { if (*Ptr == '\\' && *(Ptr + 1) == '.' && *(Ptr + 2) == '.' && *(Ptr + 3) == L'\\') { @@ -893,27 +891,27 @@ BOpt_AppendFileName ( // DO NOT convert the .. if it is at the end of the string. This will // break the .. behavior in changing directories. // // - // Use TmpStr as a backup, as StrCpy in BaseLib does not handle copy of two strings + // Use TmpStr as a backup, as StrCpyS in BaseLib does not handle copy of two strings // that overlap. // - StrCpy (TmpStr, Ptr + 3); - StrCpy (LastSlash, TmpStr); + StrCpyS (TmpStr, DestMax, Ptr + 3); + StrCpyS (LastSlash, DestMax - (UINTN) (LastSlash - Str), TmpStr); Ptr = LastSlash; } else if (*Ptr == '\\' && *(Ptr + 1) == '.' && *(Ptr + 2) == '\\') { // // Convert a "\.\" to a "\" // // - // Use TmpStr as a backup, as StrCpy in BaseLib does not handle copy of two strings + // Use TmpStr as a backup, as StrCpyS in BaseLib does not handle copy of two strings // that overlap. // - StrCpy (TmpStr, Ptr + 2); - StrCpy (Ptr, TmpStr); + StrCpyS (TmpStr, DestMax, Ptr + 2); + StrCpyS (Ptr, DestMax - (UINTN) (Ptr - Str), TmpStr); Ptr = LastSlash; } else if (*Ptr == '\\') { LastSlash = Ptr; } diff --git a/MdeModulePkg/Application/UiApp/BootMaint/FormGuid.h b/MdeModulePkg/Application/UiApp/BootMaint/FormGuid.h index c80d792..ab3d9c9 100644 --- a/MdeModulePkg/Application/UiApp/BootMaint/FormGuid.h +++ b/MdeModulePkg/Application/UiApp/BootMaint/FormGuid.h @@ -193,11 +193,11 @@ typedef struct { /// /// This is the data structure used by File Explorer formset /// typedef struct { - UINT16 DescriptionData[75]; + UINT16 DescriptionData[MAX_MENU_NUMBER]; UINT16 OptionalData[127]; UINT8 Active; UINT8 ForceReconnect; } FILE_EXPLORER_NV_DATA; diff --git a/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c b/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c index d85f2ea..0e85a83 100644 --- a/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c +++ b/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c @@ -836,11 +836,11 @@ UpdateConModePage ( // // Build mode string Column x Row // UnicodeValueToString (ModeString, 0, Col, 0); PStr = &ModeString[0]; - StrnCat (PStr, L" x ", StrLen(L" x ") + 1); + StrnCatS (PStr, sizeof (ModeString) / sizeof (ModeString[0]), L" x ", StrLen(L" x ") + 1); PStr = PStr + StrLen (PStr); UnicodeValueToString (PStr , 0, Row, 0); ModeToken[Index] = HiiSetString (CallbackData->BmmHiiHandle, 0, ModeString, NULL); diff --git a/MdeModulePkg/Application/UiApp/BootMaint/Variable.c b/MdeModulePkg/Application/UiApp/BootMaint/Variable.c index 5e5592f..4fe8c53 100644 --- a/MdeModulePkg/Application/UiApp/BootMaint/Variable.c +++ b/MdeModulePkg/Application/UiApp/BootMaint/Variable.c @@ -557,11 +557,11 @@ Var_UpdateDriverOption ( L"Driver%04x", Index ); if (*DescriptionData == 0x0000) { - StrCpy (DescriptionData, DriverString); + StrCpyS (DescriptionData, MAX_MENU_NUMBER, DriverString); } BufferSize = sizeof (UINT32) + sizeof (UINT16) + StrSize (DescriptionData); BufferSize += GetDevicePathSize (CallbackData->LoadContext->FilePathList); @@ -725,11 +725,11 @@ Var_UpdateBootOption ( Index = BOpt_GetBootOptionNumber () ; UnicodeSPrint (BootString, sizeof (BootString), L"Boot%04x", Index); if (NvRamMap->DescriptionData[0] == 0x0000) { - StrCpy (NvRamMap->DescriptionData, BootString); + StrCpyS (NvRamMap->DescriptionData, sizeof (NvRamMap->DescriptionData) / sizeof (NvRamMap->DescriptionData[0]), BootString); } BufferSize = sizeof (UINT32) + sizeof (UINT16) + StrSize (NvRamMap->DescriptionData); BufferSize += GetDevicePathSize (CallbackData->LoadContext->FilePathList); diff --git a/MdeModulePkg/Application/UiApp/BootMngr/BootManager.c b/MdeModulePkg/Application/UiApp/BootMngr/BootManager.c index fa35ad4..986413c 100644 --- a/MdeModulePkg/Application/UiApp/BootMngr/BootManager.c +++ b/MdeModulePkg/Application/UiApp/BootMngr/BootManager.c @@ -234,10 +234,11 @@ EnumerateBootOptions ( EFI_IFR_GUID_LABEL *EndLabel; UINT16 DeviceType; BOOLEAN IsLegacyOption; BOOLEAN NeedEndOp; UINT16 KeyInput; + UINTN DestMax; DeviceType = (UINT16) -1; // // for better user experience @@ -323,14 +324,15 @@ EnumerateBootOptions ( Token = HiiSetString (HiiHandle, 0, BootOption[Index].Description, NULL); TempStr = UiDevicePathToStr (BootOption[Index].FilePath); TempSize = StrSize (TempStr); + DestMax = (TempSize + StrSize (L"Device Path : ")) / sizeof(CHAR16); HelpString = AllocateZeroPool (TempSize + StrSize (L"Device Path : ")); ASSERT (HelpString != NULL); - StrCat (HelpString, L"Device Path : "); - StrCat (HelpString, TempStr); + StrCatS (HelpString, DestMax, L"Device Path : "); + StrCatS (HelpString, DestMax, TempStr); HelpToken = HiiSetString (HiiHandle, 0, HelpString, NULL); HiiCreateActionOpCode ( StartOpCodeHandle, diff --git a/MdeModulePkg/Application/UiApp/DeviceMngr/DeviceManager.c b/MdeModulePkg/Application/UiApp/DeviceMngr/DeviceManager.c index 0256500..3fcc4c9 100644 --- a/MdeModulePkg/Application/UiApp/DeviceMngr/DeviceManager.c +++ b/MdeModulePkg/Application/UiApp/DeviceMngr/DeviceManager.c @@ -170,11 +170,11 @@ GetMacAddressString( if (String == NULL) { return FALSE; } *PBuffer = String; - StrCpy(String, L"MAC:"); + StrCpyS(String, BufferLen / sizeof (CHAR16), L"MAC:"); String += 4; // // Convert the MAC address into a unicode string. // diff --git a/MdeModulePkg/Application/UiApp/FrontPage.c b/MdeModulePkg/Application/UiApp/FrontPage.c index d8fd4f9..b0bdf26 100644 --- a/MdeModulePkg/Application/UiApp/FrontPage.c +++ b/MdeModulePkg/Application/UiApp/FrontPage.c @@ -643,27 +643,28 @@ ConvertProcessorToString ( OUT CHAR16 **String ) { CHAR16 *StringBuffer; UINTN Index; + UINTN DestMax; UINT32 FreqMhz; if (Base10Exponent >= 6) { FreqMhz = ProcessorFrequency; for (Index = 0; Index < (UINTN) (Base10Exponent - 6); Index++) { FreqMhz *= 10; } } else { FreqMhz = 0; } - + DestMax = 0x20 / sizeof (CHAR16); StringBuffer = AllocateZeroPool (0x20); ASSERT (StringBuffer != NULL); Index = UnicodeValueToString (StringBuffer, LEFT_JUSTIFY, FreqMhz / 1000, 3); - StrCat (StringBuffer, L"."); + StrCatS (StringBuffer, DestMax, L"."); UnicodeValueToString (StringBuffer + Index + 1, PREFIX_ZERO, (FreqMhz % 1000) / 10, 2); - StrCat (StringBuffer, L" GHz"); + StrCatS (StringBuffer, DestMax, L" GHz"); *String = (CHAR16 *) StringBuffer; return ; } @@ -683,11 +684,11 @@ ConvertMemorySizeToString ( CHAR16 *StringBuffer; StringBuffer = AllocateZeroPool (0x24); ASSERT (StringBuffer != NULL); UnicodeValueToString (StringBuffer, LEFT_JUSTIFY, MemorySize, 10); - StrCat (StringBuffer, L" MB RAM"); + StrCatS (StringBuffer, 0x24 / sizeof (CHAR16), L" MB RAM"); *String = (CHAR16 *) StringBuffer; return ; } @@ -1540,12 +1541,12 @@ SetupResetReminder ( StringBuffer1 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16)); ASSERT (StringBuffer1 != NULL); StringBuffer2 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16)); ASSERT (StringBuffer2 != NULL); - StrCpy (StringBuffer1, L"Configuration changed. Reset to apply it Now."); - StrCpy (StringBuffer2, L"Press ENTER to reset"); + StrCpyS (StringBuffer1, MAX_STRING_LEN, L"Configuration changed. Reset to apply it Now."); + StrCpyS (StringBuffer2, MAX_STRING_LEN, L"Press ENTER to reset"); // // Popup a menu to notice user // do { CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, StringBuffer1, StringBuffer2, NULL); -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel