Procházet zdrojové kódy

fix(server): Do not allow node having itself as parent. Fixes stack-overflow

Fixes: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16141
Credit to oss-fuzz
Stefan Profanter před 4 roky
rodič
revize
c455ed1e67
1 změnil soubory, kde provedl 13 přidání a 1 odebrání
  1. 13 1
      src/server/ua_services_nodemanagement.c

+ 13 - 1
src/server/ua_services_nodemanagement.c

@@ -638,8 +638,20 @@ AddNode_addRefs(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId,
         }
     }
 
+    UA_StatusCode retval;
+    /* Make sure newly created node does not have itself as parent */
+    if (UA_NodeId_equal(nodeId, parentNodeId)) {
+        UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
+                                                       "AddNodes: The node %.*s can not have "
+                                                       "itself as parent",
+                                                       (int)nodeIdStr.length, nodeIdStr.data));
+        retval = UA_STATUSCODE_BADINVALIDARGUMENT;
+        goto cleanup;
+    }
+
+
     /* Check parent reference. Objects may have no parent. */
-    UA_StatusCode retval = checkParentReference(server, session, node->nodeClass,
+    retval = checkParentReference(server, session, node->nodeClass,
                                                 parentNodeId, referenceTypeId);
     if(retval != UA_STATUSCODE_GOOD) {
         UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,