Concatenate a narrow string to another string.\r
\r
@param Destination The destination string.\r
+ @param DestMax The Max length of destination string.\r
@param Source The source string. The string to be concatenated.\r
to the end of Destination.\r
\r
VOID\r
NewStrCat (\r
IN OUT CHAR16 *Destination,\r
+ IN UINTN DestMax,\r
IN CHAR16 *Source\r
)\r
{\r
Destination[Length] = NARROW_CHAR;\r
Length++;\r
\r
- StrCpy (Destination + Length, Source);\r
+ StrCpyS (Destination + Length, DestMax - Length, Source);\r
}\r
\r
/**\r
\r
default:\r
return EFI_UNSUPPORTED;\r
- break;\r
}\r
\r
UnicodeSPrint (FormattedNumber, BufferSize, Format, Value);\r
UINT8 ValueType;\r
EFI_IFR_ORDERED_LIST *OrderList;\r
BOOLEAN ValueInvalid;\r
+ UINTN MaxLen;\r
\r
Status = EFI_SUCCESS;\r
\r
// We now know how many strings we will have, so we can allocate the\r
// space required for the array or strings.\r
//\r
- *OptionString = AllocateZeroPool (OrderList->MaxContainers * BufferSize);\r
+ MaxLen = OrderList->MaxContainers * BufferSize / sizeof (CHAR16);\r
+ *OptionString = AllocateZeroPool (MaxLen * sizeof (CHAR16));\r
ASSERT (*OptionString);\r
\r
HiiValue.Type = ValueType;\r
}\r
\r
Character[0] = LEFT_ONEOF_DELIMITER;\r
- NewStrCat (OptionString[0], Character);\r
+ NewStrCat (OptionString[0], MaxLen, Character);\r
StringPtr = GetToken (OneOfOption->OptionOpCode->Option, gFormData->HiiHandle);\r
ASSERT (StringPtr != NULL);\r
- NewStrCat (OptionString[0], StringPtr);\r
+ NewStrCat (OptionString[0], MaxLen, StringPtr);\r
Character[0] = RIGHT_ONEOF_DELIMITER;\r
- NewStrCat (OptionString[0], Character);\r
+ NewStrCat (OptionString[0], MaxLen, Character);\r
Character[0] = CHAR_CARRIAGE_RETURN;\r
- NewStrCat (OptionString[0], Character);\r
+ NewStrCat (OptionString[0], MaxLen, Character);\r
FreePool (StringPtr);\r
}\r
\r
// Not report error, just get the correct option string info.\r
//\r
Character[0] = LEFT_ONEOF_DELIMITER;\r
- NewStrCat (OptionString[0], Character);\r
+ NewStrCat (OptionString[0], MaxLen, Character);\r
StringPtr = GetToken (OneOfOption->OptionOpCode->Option, gFormData->HiiHandle);\r
ASSERT (StringPtr != NULL);\r
- NewStrCat (OptionString[0], StringPtr);\r
+ NewStrCat (OptionString[0], MaxLen, StringPtr);\r
Character[0] = RIGHT_ONEOF_DELIMITER;\r
- NewStrCat (OptionString[0], Character);\r
+ NewStrCat (OptionString[0], MaxLen, Character);\r
Character[0] = CHAR_CARRIAGE_RETURN;\r
- NewStrCat (OptionString[0], Character);\r
+ NewStrCat (OptionString[0], MaxLen, Character);\r
FreePool (StringPtr);\r
\r
continue;\r
//\r
Status = GetSelectionInputPopUp (MenuOption);\r
} else {\r
+ MaxLen = BufferSize / sizeof(CHAR16);\r
*OptionString = AllocateZeroPool (BufferSize);\r
ASSERT (*OptionString);\r
\r
}\r
\r
Character[0] = LEFT_ONEOF_DELIMITER;\r
- NewStrCat (OptionString[0], Character);\r
+ NewStrCat (OptionString[0], MaxLen, Character);\r
StringPtr = GetToken (OneOfOption->OptionOpCode->Option, gFormData->HiiHandle);\r
ASSERT (StringPtr != NULL);\r
- NewStrCat (OptionString[0], StringPtr);\r
+ NewStrCat (OptionString[0], MaxLen, StringPtr);\r
Character[0] = RIGHT_ONEOF_DELIMITER;\r
- NewStrCat (OptionString[0], Character);\r
+ NewStrCat (OptionString[0], MaxLen, Character);\r
\r
FreePool (StringPtr);\r
}\r