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]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to