Pārlūkot izejas kodu

Events: Add check if trigger origin node exists

Stefan Profanter 5 gadi atpakaļ
vecāks
revīzija
aeee7bee9b
1 mainītis faili ar 10 papildinājumiem un 0 dzēšanām
  1. 10 0
      src/server/ua_subscription_events.c

+ 10 - 0
src/server/ua_subscription_events.c

@@ -432,6 +432,16 @@ static const UA_NodeId parentReferences_events[2] =
 UA_StatusCode
 UA_Server_triggerEvent(UA_Server *server, const UA_NodeId eventNodeId, const UA_NodeId origin,
                        UA_ByteString *outEventId, const UA_Boolean deleteEventNode) {
+	/* Check that the origin node exists */
+	const UA_Node *originNode = UA_Nodestore_getNode(server->nsCtx, &origin);
+	if(!originNode) {
+		UA_LOG_ERROR(&server->config.logger, UA_LOGCATEGORY_USERLAND,
+					 "Origin node for event does not exist.");
+		return UA_STATUSCODE_BADNOTFOUND;
+	}
+	UA_Nodestore_releaseNode(server->nsCtx, originNode);
+
+
     /* Make sure the origin is in the ObjectsFolder (TODO: or in the ViewsFolder) */
     UA_NodeId *parentTypeHierachy = NULL;
     size_t parentTypeHierachySize = 0;