From d91cb87049db11a193bacec72506a24df19e46e9 Mon Sep 17 00:00:00 2001 From: Dandan Bi Date: Thu, 13 Aug 2015 00:15:06 +0000 Subject: [PATCH] MdeModulePkg:Use safe string functions in UiApp. Replace the unsafe string functions with the safe one in UiApp. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi Reviewed-by: Qiu Shumin Reviewed-by: Eric Dong git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18214 6f19259b-4bc3-4df7-8a09-765794883524 --- .../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 ++-- .../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 fa88f6344f..5213e3cc98 100644 --- a/MdeModulePkg/Application/UiApp/BootMaint/BootOption.c +++ b/MdeModulePkg/Application/UiApp/BootMaint/BootOption.c @@ -786,7 +786,7 @@ BOpt_GetBootOptions ( 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; @@ -862,27 +862,25 @@ BOpt_AppendFileName ( 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; @@ -895,11 +893,11 @@ BOpt_AppendFileName ( // // - // 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) == '\\') { // @@ -907,11 +905,11 @@ BOpt_AppendFileName ( // // - // 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 c80d7921a0..ab3d9c9aa6 100644 --- a/MdeModulePkg/Application/UiApp/BootMaint/FormGuid.h +++ b/MdeModulePkg/Application/UiApp/BootMaint/FormGuid.h @@ -195,7 +195,7 @@ 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; diff --git a/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c b/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c index d85f2eaef9..0e85a832c1 100644 --- a/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c +++ b/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c @@ -838,7 +838,7 @@ UpdateConModePage ( // 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); diff --git a/MdeModulePkg/Application/UiApp/BootMaint/Variable.c b/MdeModulePkg/Application/UiApp/BootMaint/Variable.c index 5e5592fb93..4fe8c534eb 100644 --- a/MdeModulePkg/Application/UiApp/BootMaint/Variable.c +++ b/MdeModulePkg/Application/UiApp/BootMaint/Variable.c @@ -559,7 +559,7 @@ Var_UpdateDriverOption ( ); if (*DescriptionData == 0x0000) { - StrCpy (DescriptionData, DriverString); + StrCpyS (DescriptionData, MAX_MENU_NUMBER, DriverString); } BufferSize = sizeof (UINT32) + sizeof (UINT16) + StrSize (DescriptionData); @@ -727,7 +727,7 @@ Var_UpdateBootOption ( 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); diff --git a/MdeModulePkg/Application/UiApp/BootMngr/BootManager.c b/MdeModulePkg/Application/UiApp/BootMngr/BootManager.c index fa35ad4bf2..986413c19b 100644 --- a/MdeModulePkg/Application/UiApp/BootMngr/BootManager.c +++ b/MdeModulePkg/Application/UiApp/BootMngr/BootManager.c @@ -236,6 +236,7 @@ EnumerateBootOptions ( BOOLEAN IsLegacyOption; BOOLEAN NeedEndOp; UINT16 KeyInput; + UINTN DestMax; DeviceType = (UINT16) -1; @@ -325,10 +326,11 @@ EnumerateBootOptions ( 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); diff --git a/MdeModulePkg/Application/UiApp/DeviceMngr/DeviceManager.c b/MdeModulePkg/Application/UiApp/DeviceMngr/DeviceManager.c index 0256500798..3fcc4c9521 100644 --- a/MdeModulePkg/Application/UiApp/DeviceMngr/DeviceManager.c +++ b/MdeModulePkg/Application/UiApp/DeviceMngr/DeviceManager.c @@ -172,7 +172,7 @@ GetMacAddressString( } *PBuffer = String; - StrCpy(String, L"MAC:"); + StrCpyS(String, BufferLen / sizeof (CHAR16), L"MAC:"); String += 4; // diff --git a/MdeModulePkg/Application/UiApp/FrontPage.c b/MdeModulePkg/Application/UiApp/FrontPage.c index d8fd4f9e9b..b0bdf26d50 100644 --- a/MdeModulePkg/Application/UiApp/FrontPage.c +++ b/MdeModulePkg/Application/UiApp/FrontPage.c @@ -645,6 +645,7 @@ ConvertProcessorToString ( { CHAR16 *StringBuffer; UINTN Index; + UINTN DestMax; UINT32 FreqMhz; if (Base10Exponent >= 6) { @@ -655,13 +656,13 @@ ConvertProcessorToString ( } 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 ; } @@ -685,7 +686,7 @@ ConvertMemorySizeToString ( 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; @@ -1542,8 +1543,8 @@ SetupResetReminder ( 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 // -- 2.39.2