From 7fdad96f115d12adfb798c5f0578edd2d105bcb4 Mon Sep 17 00:00:00 2001 From: Nickle Wang Date: Thu, 23 Nov 2023 22:10:18 +0800 Subject: [PATCH] RedfishClientPkg/RedfishFeatureUtilityLib: add string NULL check 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 Cc: Abner Chang Cc: Igor Kulchytskyy Cc: Nick Ramirez --- .../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 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; } }