소스 검색

feature: check target nodeclass in AddReferences service

Julius Pfrommer 8 년 전
부모
커밋
dd23e5cb92
1개의 변경된 파일3개의 추가작업 그리고 0개의 파일을 삭제
  1. 3 0
      src/server/ua_services_nodemanagement.c

+ 3 - 0
src/server/ua_services_nodemanagement.c

@@ -919,6 +919,9 @@ UA_Server_addMethodNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
 static UA_StatusCode
 static UA_StatusCode
 addOneWayReference(UA_Server *server, UA_Session *session,
 addOneWayReference(UA_Server *server, UA_Session *session,
                    UA_Node *node, const UA_AddReferencesItem *item) {
                    UA_Node *node, const UA_AddReferencesItem *item) {
+    if(item->targetNodeClass != UA_NODECLASS_UNSPECIFIED &&
+       item->targetNodeClass != node->nodeClass)
+        return UA_STATUSCODE_BADNODECLASSINVALID;
     size_t i = node->referencesSize;
     size_t i = node->referencesSize;
     size_t refssize = (i+1) | 3; // so the realloc is not necessary every time
     size_t refssize = (i+1) | 3; // so the realloc is not necessary every time
     UA_ReferenceNode *new_refs = UA_realloc(node->references, sizeof(UA_ReferenceNode) * refssize);
     UA_ReferenceNode *new_refs = UA_realloc(node->references, sizeof(UA_ReferenceNode) * refssize);