EFI_STATUS Status;\r
CHAR16 *StringPtr;\r
EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
- CHAR16 *NextStringPtr; \r
+ CHAR16 *NextStringPtr;\r
CHAR16 *KeywordData;\r
EFI_STRING_ID KeywordStringId;\r
UINT32 RetVal;\r
CHAR16 *ValueElement;\r
BOOLEAN ReadOnly;\r
EFI_STRING InternalProgress;\r
+ CHAR16 *TempString;\r
\r
if (This == NULL || Progress == NULL || ProgressErr == NULL || KeywordString == NULL) {\r
return EFI_INVALID_PARAMETER;\r
*Progress = KeywordString;\r
*ProgressErr = KEYWORD_HANDLER_UNDEFINED_PROCESSING_ERROR;\r
Status = EFI_SUCCESS;\r
- StringPtr = KeywordString;\r
MultiConfigResp = NULL;\r
NameSpace = NULL;\r
DevicePath = NULL;\r
ConfigResp = NULL;\r
KeywordStringId = 0;\r
\r
+ //\r
+ // Use temp string to avoid changing input string buffer.\r
+ //\r
+ TempString = AllocateCopyPool (StrSize (KeywordString), KeywordString);\r
+ ASSERT (TempString != NULL);\r
+ StringPtr = TempString;\r
+\r
while ((StringPtr != NULL) && (*StringPtr != L'\0')) {\r
//\r
// 1. Get NameSpace from NameSpaceId keyword.\r
*ProgressErr = KEYWORD_HANDLER_NO_ERROR;\r
\r
Done:\r
+ ASSERT (TempString != NULL);\r
+ FreePool (TempString);\r
if (NameSpace != NULL) {\r
FreePool (NameSpace);\r
}\r
BOOLEAN ReadOnly;\r
CHAR16 *KeywordResp;\r
CHAR16 *MultiKeywordResp;\r
+ CHAR16 *TempString;\r
\r
if (This == NULL || Progress == NULL || ProgressErr == NULL || Results == NULL) {\r
return EFI_INVALID_PARAMETER;\r
ReadOnly = FALSE;\r
MultiKeywordResp = NULL;\r
KeywordStringId = 0;\r
+ TempString = NULL;\r
\r
+ //\r
+ // Use temp string to avoid changing input string buffer.\r
+ //\r
+ if (NameSpaceId != NULL) {\r
+ TempString = AllocateCopyPool (StrSize (NameSpaceId), NameSpaceId);\r
+ ASSERT (TempString != NULL);\r
+ }\r
//\r
// 1. Get NameSpace from NameSpaceId keyword.\r
//\r
- Status = ExtractNameSpace (NameSpaceId, &NameSpace, NULL);\r
+ Status = ExtractNameSpace (TempString, &NameSpace, NULL);\r
+ if (TempString != NULL) {\r
+ FreePool (TempString);\r
+ TempString = NULL;\r
+ }\r
if (EFI_ERROR (Status)) {\r
*ProgressErr = KEYWORD_HANDLER_NAMESPACE_ID_NOT_FOUND;\r
return Status;\r
}\r
\r
if (KeywordString != NULL) {\r
- StringPtr = KeywordString;\r
+ //\r
+ // Use temp string to avoid changing input string buffer.\r
+ //\r
+ TempString = AllocateCopyPool (StrSize (KeywordString), KeywordString);\r
+ ASSERT (TempString != NULL);\r
+ StringPtr = TempString;\r
\r
while (*StringPtr != L'\0') {\r
//\r
*ProgressErr = KEYWORD_HANDLER_NO_ERROR;\r
\r
Done:\r
+ if (TempString != NULL) {\r
+ FreePool (TempString);\r
+ }\r
if (NameSpace != NULL) {\r
FreePool (NameSpace);\r
}\r