The pointer to the destination string changed,the max length also changed.Previous change neglect this point. And base on the code logic,we can use StrCatS to replace StrCpyS.Now this patch is to fix this bug.
Signed-off-by: Dandan Bi <[email protected]> --- MdeModulePkg/Library/UefiHiiLib/HiiLib.c | 4 +- .../HiiDatabaseDxe/ConfigKeywordHandler.c | 65 +++++++--------------- 2 files changed, 23 insertions(+), 46 deletions(-) diff --git a/MdeModulePkg/Library/UefiHiiLib/HiiLib.c b/MdeModulePkg/Library/UefiHiiLib/HiiLib.c index bee5e0d..66d72ac 100644 --- a/MdeModulePkg/Library/UefiHiiLib/HiiLib.c +++ b/MdeModulePkg/Library/UefiHiiLib/HiiLib.c @@ -660,11 +660,11 @@ HiiConstructConfigHdr ( } // // Append L"&NAME=" // - StrCpyS (String, MaxLen, L"&NAME="); + StrCatS (ReturnString, MaxLen, L"&NAME="); String += StrLen (String); if (Name != NULL) { // // Append Name converted to <Char>NameLength @@ -675,11 +675,11 @@ HiiConstructConfigHdr ( } // // Append L"&PATH=" // - StrCpyS (String, MaxLen, L"&PATH="); + StrCatS (ReturnString, MaxLen, L"&PATH="); String += StrLen (String); // // Append the device path associated with DriverHandle converted to <HexChar>DevicePathSize // diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c index e88a0c4..a93d4ef 100644 --- a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c +++ b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c @@ -1757,11 +1757,11 @@ ConstructConfigHdr ( } // // Append L"&NAME=" // - StrCpyS (String, MaxLen, L"&NAME="); + StrCatS (ReturnString, MaxLen, L"&NAME="); String += StrLen (String); if (Name != NULL) { // // Append Name converted to <Char>NameLength @@ -1772,11 +1772,11 @@ ConstructConfigHdr ( } // // Append L"&PATH=" // - StrCpyS (String, MaxLen, L"&PATH="); + StrCatS (ReturnString, MaxLen, L"&PATH="); String += StrLen (String); // // Append the device path associated with DriverHandle converted to <HexChar>DevicePathSize // @@ -2043,18 +2043,14 @@ ExtractConfigRequest ( return EFI_OUT_OF_RESOURCES; } StringPtr = *ConfigRequest; StrCpyS (StringPtr, MaxLen, ConfigHdr); - StringPtr += StrLen (StringPtr); - *StringPtr = L'&'; - StringPtr++; + StrCatS (StringPtr, MaxLen, L"&"); - StrCpyS (StringPtr, MaxLen, RequestElement); - StringPtr += StrLen (StringPtr); - *StringPtr = L'\0'; + StrCatS (StringPtr, MaxLen, RequestElement); FreePool (ConfigHdr); FreePool (RequestElement); return EFI_SUCCESS; @@ -2151,27 +2147,21 @@ ExtractConfigResp ( return EFI_OUT_OF_RESOURCES; } StringPtr = *ConfigResp; StrCpyS (StringPtr, MaxLen, ConfigHdr); - StringPtr += StrLen (StringPtr); - *StringPtr = L'&'; - StringPtr++; + StrCatS (StringPtr, MaxLen, L"&"); - StrCpyS (StringPtr, MaxLen, RequestElement); - StringPtr += StrLen (StringPtr); - - *StringPtr = L'&'; - StringPtr++; - StrCpyS (StringPtr, MaxLen, L"VALUE="); - StringPtr += StrLen (StringPtr); + StrCatS (StringPtr, MaxLen, RequestElement); + + StrCatS (StringPtr, MaxLen, L"&"); + + StrCatS (StringPtr, MaxLen, L"VALUE="); - StrCpyS (StringPtr, MaxLen, ValueElement); - StringPtr += StrLen (StringPtr); - *StringPtr = L'\0'; + StrCatS (StringPtr, MaxLen, ValueElement); FreePool (ConfigHdr); FreePool (RequestElement); return EFI_SUCCESS; @@ -2451,47 +2441,37 @@ GenerateKeywordResp ( // // 2.1 Copy NameSpaceId section. // StrCpyS (RespStr, RespStrLen, L"NAMESPACE="); - RespStr += StrLen (RespStr); - StrCpyS (RespStr, RespStrLen, UnicodeNameSpace); - RespStr += StrLen (RespStr); + + StrCatS (RespStr, RespStrLen, UnicodeNameSpace); // // 2.2 Copy PathHdr section. // - StrCpyS (RespStr, RespStrLen, PathHdr); - RespStr += StrLen (RespStr); + StrCatS (RespStr, RespStrLen, PathHdr); // // 2.3 Copy Keyword section. // - StrCpyS (RespStr, RespStrLen, L"KEYWORD="); - RespStr += StrLen (RespStr); - StrCpyS (RespStr, RespStrLen, KeywordData); - RespStr += StrLen (RespStr); + StrCatS (RespStr, RespStrLen, L"KEYWORD="); + + StrCatS (RespStr, RespStrLen, KeywordData); // // 2.4 Copy the Value section. // - StrCpyS (RespStr, RespStrLen, ValueStr); - RespStr += StrLen (RespStr); + StrCatS (RespStr, RespStrLen, ValueStr); // // 2.5 Copy ReadOnly section if exist. // if (ReadOnly) { - StrCpyS (RespStr, RespStrLen, L"&READONLY"); - RespStr += StrLen (RespStr); + StrCatS (RespStr, RespStrLen, L"&READONLY"); } - // - // 2.6 Add the end. - // - *RespStr = L'\0'; - if (UnicodeNameSpace != NULL) { FreePool (UnicodeNameSpace); } if (PathHdr != NULL) { FreePool (PathHdr); @@ -2535,16 +2515,13 @@ MergeToMultiKeywordResp ( } FreePool (*MultiKeywordResp); *MultiKeywordResp = StringPtr; - StringPtr += StrLen (StringPtr); - - *StringPtr = L'&'; - StringPtr++; + StrCatS (StringPtr, MultiKeywordRespLen / sizeof (CHAR16), L"&"); - StrCpyS (StringPtr, MultiKeywordRespLen / sizeof (CHAR16), *KeywordResp); + StrCatS (StringPtr, MultiKeywordRespLen / sizeof (CHAR16), *KeywordResp); return EFI_SUCCESS; } /** -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

