diff --git a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c index 753cd7b22..6652539cc 100644 --- a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c +++ b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c @@ -3743,6 +3743,15 @@ CompareRedfishPropertyVagueValues ( // Loop through all key/value on Redfish service.. // while (ThisRedfishVagueKeyValuePtr != NULL) { + // + // Empty attribute string check. + // + if (IS_EMPTY_STRING (ThisConfigVagueKeyValuePtr->KeyNamePtr) || IS_EMPTY_STRING (ThisRedfishVagueKeyValuePtr->KeyNamePtr)) { + DEBUG ((DEBUG_ERROR, "%a: empty attribute name detected!!\n", __func__)); + ThisRedfishVagueKeyValuePtr = ThisRedfishVagueKeyValuePtr->NextKeyValuePtr; + continue; + } + if (AsciiStrCmp (ThisConfigVagueKeyValuePtr->KeyNamePtr, ThisRedfishVagueKeyValuePtr->KeyNamePtr) == 0) { // // Check the type of value. @@ -3758,28 +3767,36 @@ CompareRedfishPropertyVagueValues ( // // Is the string identical? // - if (AsciiStrCmp ( - ThisConfigVagueKeyValuePtr->Value->DataValue.CharPtr, - ThisRedfishVagueKeyValuePtr->Value->DataValue.CharPtr - ) == 0) - { - break; + if ((ThisConfigVagueKeyValuePtr->Value->DataValue.CharPtr != NULL) && (ThisRedfishVagueKeyValuePtr->Value->DataValue.CharPtr != NULL)) { + if (AsciiStrCmp ( + ThisConfigVagueKeyValuePtr->Value->DataValue.CharPtr, + ThisRedfishVagueKeyValuePtr->Value->DataValue.CharPtr + ) == 0) + { + break; + } else { + DEBUG ((REDFISH_DEBUG_TRACE, "%a: %a is updated\n", __func__, ThisConfigVagueKeyValuePtr->KeyNamePtr)); + return FALSE; + } } else { - return FALSE; + DEBUG ((DEBUG_ERROR, "%a: NULL attribute (%a) value detected!!\n", __func__, ThisConfigVagueKeyValuePtr->KeyNamePtr)); } } else if (ThisConfigVagueKeyValuePtr->Value->DataType == RedfishCS_Vague_DataType_Int64) { if (*ThisConfigVagueKeyValuePtr->Value->DataValue.Int64Ptr == *ThisRedfishVagueKeyValuePtr->Value->DataValue.Int64Ptr) { break; } else { + DEBUG ((REDFISH_DEBUG_TRACE, "%a: %a is updated\n", __func__, ThisConfigVagueKeyValuePtr->KeyNamePtr)); return FALSE; } } else if (ThisConfigVagueKeyValuePtr->Value->DataType == RedfishCS_Vague_DataType_Bool) { if ((UINT8)*ThisConfigVagueKeyValuePtr->Value->DataValue.BoolPtr == (UINT8)*ThisRedfishVagueKeyValuePtr->Value->DataValue.BoolPtr) { break; } else { + DEBUG ((REDFISH_DEBUG_TRACE, "%a: %a is updated\n", __func__, ThisConfigVagueKeyValuePtr->KeyNamePtr)); return FALSE; } } else { + DEBUG ((REDFISH_DEBUG_TRACE, "%a: %a unsupported type: 0x%x\n", __func__, ThisConfigVagueKeyValuePtr->KeyNamePtr, ThisConfigVagueKeyValuePtr->Value->DataType)); return FALSE; } }