From ebc1ca5a1ba99ec41d09c65bef739bff884e129b Mon Sep 17 00:00:00 2001 From: qhuang8 Date: Tue, 6 Nov 2007 01:38:25 +0000 Subject: [PATCH] Fix two issues: 1. EDK II StrnCpy does not necessarily "0" terminate destination string if the source string length is larger than "n". Caller needs to terminate it itself. 2. The definition of EFI_HII_CALLBACK_PACKET has been changed to follow framework HII spec 0.92, we need to change the corresponding code correctly. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4270 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Universal/SetupBrowserDxe/InputHandler.c | 14 ++++++++------ .../Universal/SetupBrowserDxe/Presentation.c | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/IntelFrameworkModulePkg/Universal/SetupBrowserDxe/InputHandler.c b/IntelFrameworkModulePkg/Universal/SetupBrowserDxe/InputHandler.c index bd0c853a05..3c0a0785ab 100644 --- a/IntelFrameworkModulePkg/Universal/SetupBrowserDxe/InputHandler.c +++ b/IntelFrameworkModulePkg/Universal/SetupBrowserDxe/InputHandler.c @@ -290,7 +290,7 @@ ReadPassword ( SecondEntry = TRUE; } else if (Status == EFI_NOT_READY) { Error: - if (Packet != NULL) { + if (Packet != NULL && Packet->String != NULL) { // // Upon error, we will likely receive a string to print out // Display error popup @@ -403,7 +403,7 @@ Error: // if (Confirmation) { if (EFI_ERROR (Status)) { - if (Packet->String == NULL) { + if (Packet == NULL || Packet->String == NULL) { WidthOfString = GetStringWidth (gConfirmError); ScreenSize = MAX (WidthOfString, GetStringWidth (gPressEnter)) / 2; CreatePopUp (ScreenSize, 4, &NullCharacter, gConfirmError, gPressEnter, &NullCharacter); @@ -513,12 +513,14 @@ Error: // default: if ((StringPtr[0] == CHAR_NULL) && (Key.UnicodeChar != CHAR_BACKSPACE)) { + StringPtr[0] = Key.UnicodeChar; + StringPtr[1] = CHAR_NULL; if (!Confirmation) { - StrnCpy (StringPtr, &Key.UnicodeChar, 1); - StrnCpy (TempString, &Key.UnicodeChar, 1); + TempString[0] = Key.UnicodeChar; + TempString[1] = CHAR_NULL; } else { - StrnCpy (StringPtr, &Key.UnicodeChar, 1); - StrnCpy (TempString2, &Key.UnicodeChar, 1); + TempString2[0] = Key.UnicodeChar; + TempString2[1] = CHAR_NULL; ConfirmationComplete = FALSE; } } else if ((GetStringWidth (StringPtr) / 2 <= (UINTN) (MenuOption->ThisTag->Maximum - 1) / 2) && diff --git a/IntelFrameworkModulePkg/Universal/SetupBrowserDxe/Presentation.c b/IntelFrameworkModulePkg/Universal/SetupBrowserDxe/Presentation.c index 3452a8d5a2..074b009514 100644 --- a/IntelFrameworkModulePkg/Universal/SetupBrowserDxe/Presentation.c +++ b/IntelFrameworkModulePkg/Universal/SetupBrowserDxe/Presentation.c @@ -1236,7 +1236,7 @@ Returns: Selection->ThisTag->StorageWidth ); - if (Packet != NULL) { + if (Packet != NULL && Packet->String != NULL) { // // Upon error, we will likely receive a string to print out // -- 2.39.2