Add string NULL check in attribute comparison function and prevent NULL string assertion. This is not supposed to happen in normal condition so add error output for debugging purpose.
Signed-off-by: Nickle Wang <nick...@nvidia.com> Cc: Abner Chang <abner.ch...@amd.com> Cc: Igor Kulchytskyy <ig...@ami.com> Cc: Nick Ramirez <nrami...@nvidia.com> --- .../RedfishFeatureUtilityLib.c | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.c index 753cd7b2..6652539c 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; } } -- 2.17.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#111675): https://edk2.groups.io/g/devel/message/111675 Mute This Topic: https://groups.io/mt/102767547/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-