)\r
{\r
CHAR8 *AsciiLangCodes;\r
- CHAR8 Lang[RFC_3066_ENTRY_SIZE];\r
+ CHAR8 *Lang;\r
UINTN Index;\r
UINTN Count;\r
EFI_STATUS Status;\r
ASSERT (LangCodes3066 != NULL);\r
ASSERT (LangCodes639 != NULL);\r
\r
+ //\r
+ // Allocate working buffer to contain substring of LangCodes3066.\r
+ //\r
+ Lang = AllocatePool (AsciiStrSize (LangCodes3066));\r
+ if (Lang != NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
//\r
// Count the number of RFC 3066 language codes.\r
//\r
//\r
*LangCodes639 = AllocateZeroPool (ISO_639_2_ENTRY_SIZE * Count + 1);\r
if (*LangCodes639 == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto Done;\r
}\r
\r
AsciiLangCodes = LangCodes3066;\r
ASSERT_EFI_ERROR (Status);\r
}\r
\r
- return EFI_SUCCESS;\r
+ Status = EFI_SUCCESS;\r
+\r
+Done:\r
+ FreePool (Lang);\r
+ return Status;\r
}\r
\r
/**\r
OUT EFI_STRING *LanguageString\r
)\r
{\r
- HII_THUNK_PRIVATE_DATA *Private;\r
+ HII_THUNK_PRIVATE_DATA *Private;\r
EFI_HII_HANDLE UefiHiiHandle;\r
- CHAR8 PrimaryLang3066[RFC_3066_ENTRY_SIZE];\r
+ CHAR8 *PrimaryLang3066;\r
CHAR8 *PrimaryLang639;\r
CHAR8 *SecLangCodes3066;\r
CHAR8 *SecLangCodes639;\r
\r
Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
\r
- SecLangCodes639 = NULL;\r
- SecLangCodes3066 = NULL;\r
+ SecLangCodes639 = NULL;\r
+ SecLangCodes3066 = NULL;\r
+ PrimaryLang3066 = NULL;\r
UnicodeSecLangCodes639 = NULL;\r
\r
UefiHiiHandle = FwHiiHandleToUefiHiiHandle (Private, Handle);\r
\r
UnicodeStrToAsciiStr (PrimaryLanguage, PrimaryLang639);\r
\r
- Status = ConvertIso639LanguageToRfc3066Language (PrimaryLang639, PrimaryLang3066);\r
- ASSERT_EFI_ERROR (Status);\r
+ PrimaryLang3066 = ConvertIso639LanguageToRfc3066Language (PrimaryLang639);\r
+ ASSERT_EFI_ERROR (PrimaryLang3066 != NULL);\r
\r
SecLangCodes3066 = HiiLibGetSupportedSecondaryLanguages (UefiHiiHandle, PrimaryLang3066);\r
\r
if (PrimaryLang639 != NULL) {\r
FreePool (PrimaryLang639);\r
}\r
+\r
if (SecLangCodes639 != NULL) {\r
FreePool (SecLangCodes639);\r
}\r
+\r
+ if (PrimaryLang3066 != NULL) {\r
+ FreePool (PrimaryLang3066);\r
+ }\r
+\r
if (SecLangCodes3066 != NULL) {\r
FreePool (SecLangCodes3066);\r
}\r