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
This commit is contained in:
@ -290,7 +290,7 @@ ReadPassword (
|
|||||||
SecondEntry = TRUE;
|
SecondEntry = TRUE;
|
||||||
} else if (Status == EFI_NOT_READY) {
|
} else if (Status == EFI_NOT_READY) {
|
||||||
Error:
|
Error:
|
||||||
if (Packet != NULL) {
|
if (Packet != NULL && Packet->String != NULL) {
|
||||||
//
|
//
|
||||||
// Upon error, we will likely receive a string to print out
|
// Upon error, we will likely receive a string to print out
|
||||||
// Display error popup
|
// Display error popup
|
||||||
@ -403,7 +403,7 @@ Error:
|
|||||||
//
|
//
|
||||||
if (Confirmation) {
|
if (Confirmation) {
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
if (Packet->String == NULL) {
|
if (Packet == NULL || Packet->String == NULL) {
|
||||||
WidthOfString = GetStringWidth (gConfirmError);
|
WidthOfString = GetStringWidth (gConfirmError);
|
||||||
ScreenSize = MAX (WidthOfString, GetStringWidth (gPressEnter)) / 2;
|
ScreenSize = MAX (WidthOfString, GetStringWidth (gPressEnter)) / 2;
|
||||||
CreatePopUp (ScreenSize, 4, &NullCharacter, gConfirmError, gPressEnter, &NullCharacter);
|
CreatePopUp (ScreenSize, 4, &NullCharacter, gConfirmError, gPressEnter, &NullCharacter);
|
||||||
@ -513,12 +513,14 @@ Error:
|
|||||||
//
|
//
|
||||||
default:
|
default:
|
||||||
if ((StringPtr[0] == CHAR_NULL) && (Key.UnicodeChar != CHAR_BACKSPACE)) {
|
if ((StringPtr[0] == CHAR_NULL) && (Key.UnicodeChar != CHAR_BACKSPACE)) {
|
||||||
|
StringPtr[0] = Key.UnicodeChar;
|
||||||
|
StringPtr[1] = CHAR_NULL;
|
||||||
if (!Confirmation) {
|
if (!Confirmation) {
|
||||||
StrnCpy (StringPtr, &Key.UnicodeChar, 1);
|
TempString[0] = Key.UnicodeChar;
|
||||||
StrnCpy (TempString, &Key.UnicodeChar, 1);
|
TempString[1] = CHAR_NULL;
|
||||||
} else {
|
} else {
|
||||||
StrnCpy (StringPtr, &Key.UnicodeChar, 1);
|
TempString2[0] = Key.UnicodeChar;
|
||||||
StrnCpy (TempString2, &Key.UnicodeChar, 1);
|
TempString2[1] = CHAR_NULL;
|
||||||
ConfirmationComplete = FALSE;
|
ConfirmationComplete = FALSE;
|
||||||
}
|
}
|
||||||
} else if ((GetStringWidth (StringPtr) / 2 <= (UINTN) (MenuOption->ThisTag->Maximum - 1) / 2) &&
|
} else if ((GetStringWidth (StringPtr) / 2 <= (UINTN) (MenuOption->ThisTag->Maximum - 1) / 2) &&
|
||||||
|
@ -1236,7 +1236,7 @@ Returns:
|
|||||||
Selection->ThisTag->StorageWidth
|
Selection->ThisTag->StorageWidth
|
||||||
);
|
);
|
||||||
|
|
||||||
if (Packet != NULL) {
|
if (Packet != NULL && Packet->String != NULL) {
|
||||||
//
|
//
|
||||||
// Upon error, we will likely receive a string to print out
|
// Upon error, we will likely receive a string to print out
|
||||||
//
|
//
|
||||||
|
Reference in New Issue
Block a user