Julius Pfrommer 9 anos atrás
pai
commit
106bf77439
1 arquivos alterados com 6 adições e 7 exclusões
  1. 6 7
      src/server/ua_services_view.c

+ 6 - 7
src/server/ua_services_view.c

@@ -117,16 +117,15 @@ is_relevant: ;
 		UA_Array_delete(readNodesResults, &UA_TYPES[UA_TYPES_DATAVALUE], 6);
 		UA_Array_delete(diagnosticInfos, &UA_TYPES[UA_TYPES_DIAGNOSTICINFO], 6);
 		node = tempNode;
+        if(node && descr->nodeClassMask != 0 && (node->nodeClass & descr->nodeClassMask) == 0) {
+            UA_ObjectNode_delete((UA_ObjectNode*)tempNode);
+            return UA_NULL;
+        }
 	}
 #else
     const UA_Node *node = UA_NodeStore_get(server->nodestore, &reference->targetId.nodeId);
 #endif
     if(node && descr->nodeClassMask != 0 && (node->nodeClass & descr->nodeClassMask) == 0) {
-#ifdef UA_EXTERNAL_NAMESPACES
-    	if(*isExternal == UA_TRUE){
-    		UA_ObjectNode_delete((UA_ObjectNode*)node);
-    	} else
-#endif
     	UA_NodeStore_release(node);
         return UA_NULL;
     }
@@ -309,7 +308,7 @@ Service_Browse_single(UA_Server *server, UA_Session *session, struct Continuatio
 #ifdef UA_EXTERNAL_NAMESPACES
         	if(isExternal == UA_TRUE)
         		/*	relevant_node returns a node malloced with UA_ObjectNode_new if it is external (there is no UA_Node_new function)	*/
-        		UA_ObjectNode_delete((UA_ObjectNode*)current);
+        		UA_ObjectNode_delete((UA_ObjectNode*)(uintptr_t)current);
         	else
         		UA_NodeStore_release(current);
 #else
@@ -322,7 +321,7 @@ Service_Browse_single(UA_Server *server, UA_Session *session, struct Continuatio
                                                         descr->resultMask, &result->references[referencesCount]);
 #ifdef UA_EXTERNAL_NAMESPACES
         if(isExternal == UA_TRUE)
-        	UA_ObjectNode_delete((UA_ObjectNode*)current);
+        	UA_ObjectNode_delete((UA_ObjectNode*)(uintptr_t)current);
         else
         	UA_NodeStore_release(current);
 #else