Browse Source

HPCC-12158 Check ptree pointer before use in addClusterQueryStates

Signed-off-by: Anthony Fishbeck <anthony.fishbeck@lexisnexis.com>
Anthony Fishbeck 10 years ago
parent
commit
973c8df831
1 changed files with 16 additions and 12 deletions
  1. 16 12
      esp/services/ws_workunits/ws_workunitsQuerySets.cpp

+ 16 - 12
esp/services/ws_workunits/ws_workunitsQuerySets.cpp

@@ -814,7 +814,8 @@ bool CWsWorkunitsEx::onWUQuerysets(IEspContext &context, IEspWUQuerysetsRequest
 
 void addClusterQueryStates(IPropertyTree* queriesOnCluster, const char *target, const char *id, IArrayOf<IEspClusterQueryState>& clusterStates, double version)
 {
-    queriesOnCluster = queriesOnCluster->queryPropTree("Endpoint[1]/Queries[1]");
+    if (queriesOnCluster)
+        queriesOnCluster = queriesOnCluster->queryPropTree("Endpoint[1]/Queries[1]");
     if (!queriesOnCluster)
         return;
 
@@ -824,21 +825,24 @@ void addClusterQueryStates(IPropertyTree* queriesOnCluster, const char *target,
     clusterState->setCluster(target);
 
     VStringBuffer xpath("Query[@id='%s']", id);
-    IPropertyTree *query = queriesOnCluster->getPropTree(xpath.str());
-    int suspended = query->getPropInt("@suspended");
-    const char* error = query->queryProp("@error");
+    IPropertyTree *query = queriesOnCluster->queryPropTree(xpath.str());
     if (!query)
         clusterState->setState("Not Found");
-    else if (suspended)
+    else
     {
-        clusterState->setState("Suspended");
-        if (suspended<reporting)
-            clusterState->setMixedNodeStates(true);
+        int suspended = query->getPropInt("@suspended");
+        const char* error = query->queryProp("@error");
+        if (0==suspended)
+            clusterState->setState("Available");
+        else
+        {
+            clusterState->setState("Suspended");
+            if (suspended<reporting)
+                clusterState->setMixedNodeStates(true);
+        }
+        if (error && *error)
+            clusterState->setErrors(error);
     }
-    else
-        clusterState->setState("Available");
-    if ((version >=1.46) && error && *error)
-        clusterState->setErrors(error);
 
     clusterStates.append(*clusterState.getClear());
 }