Browse Source

fixed some illegal memory access by adding init funcitons properly

FIXME: valgrind reports memleaks
Stasik0 10 years ago
parent
commit
d415fa888b

+ 5 - 3
src/server/nodestore/open62541_nodestore_nodemanagement.c

@@ -123,7 +123,7 @@ void UA_VariableNode_setAttributes(UA_VariableAttributes *variableAttributes, UA
 			UA_Variant_copy(&variableAttributes->value,&node->value);
 	}
 	if(variableAttributes->specifiedAttributes & UA_NODEATTRIBUTESMASK_DATATYPE){
-				UA_NodeId_copy(&variableAttributes->dataType,&node->dataType);
+			UA_NodeId_copy(&variableAttributes->dataType,&node->dataType);
 	}
 	if(variableAttributes->specifiedAttributes & UA_NODEATTRIBUTESMASK_VALUERANK){
 		node->valueRank = variableAttributes->valueRank;
@@ -205,7 +205,7 @@ UA_Int32 open62541NodeStore_AddNodes(const UA_RequestHeader *requestHeader,UA_Ad
 	UA_Node *node = UA_NULL;
 	for(UA_UInt32 i=0;i<indicesSize;i++){
 
-		const UA_Node *parent;
+		const UA_Node *parent = UA_NULL;
 		//todo what if node is in another namespace, readrequest to test, if it exists?
 		open62541NodeStore *ns = open62541NodeStore_getNodeStore();
 		if (open62541NodeStore_get(ns, &nodesToAdd->parentNodeId.nodeId,
@@ -240,7 +240,7 @@ UA_Int32 open62541NodeStore_AddNodes(const UA_RequestHeader *requestHeader,UA_Ad
 			case UA_NODECLASS_OBJECT:
 			{
 				UA_ObjectAttributes attributes;
-
+				UA_ObjectAttributes_init(&attributes);
 				newNode = (UA_Node*)UA_ObjectNode_new();
 				newNode->nodeClass = UA_NODECLASS_OBJECT;
 				UA_ObjectAttributes_decodeBinary(&nodesToAdd[indices[i]].nodeAttributes.body,&offset,&attributes);
@@ -256,6 +256,7 @@ UA_Int32 open62541NodeStore_AddNodes(const UA_RequestHeader *requestHeader,UA_Ad
 			case UA_NODECLASS_REFERENCETYPE:
 			{
 				UA_ReferenceTypeAttributes attributes;
+				UA_ReferenceTypeAttributes_init(&attributes);
 				newNode = (UA_Node*)UA_ReferenceTypeNode_new();
 				newNode->nodeClass = UA_NODECLASS_REFERENCETYPE;
 				UA_ReferenceTypeAttributes_decodeBinary(&nodesToAdd[indices[i]].nodeAttributes.body,&offset,&attributes);
@@ -265,6 +266,7 @@ UA_Int32 open62541NodeStore_AddNodes(const UA_RequestHeader *requestHeader,UA_Ad
 			case UA_NODECLASS_VARIABLE:
 			{
 				UA_VariableAttributes attributes;
+				UA_VariableAttributes_init(&attributes);
 				newNode = (UA_Node*)UA_VariableNode_new();
 				newNode->nodeClass = UA_NODECLASS_VARIABLE;
 				UA_VariableAttributes_decodeBinary(&nodesToAdd[indices[i]].nodeAttributes.body,&offset,&attributes);

+ 6 - 3
src/server/ua_namespace_manager.c

@@ -20,10 +20,12 @@ struct UA_NamespaceManager {
     UA_UInt32    currentNamespaceCount;
 };
 
-void UA_NamespaceManager_new(UA_NamespaceManager** namespaceManager)
+UA_NamespaceManager* UA_NamespaceManager_new()
 {
-	*namespaceManager = UA_alloc(sizeof(UA_NamespaceManager));
-	(*namespaceManager)->currentNamespaceCount = 0;
+	UA_NamespaceManager* namespaceManager = UA_alloc(sizeof(UA_NamespaceManager));
+	namespaceManager->currentNamespaceCount = 0;
+	LIST_INIT(&(namespaceManager->namespaces));
+	return namespaceManager;
 
 }
 
@@ -34,6 +36,7 @@ UA_StatusCode UA_NamespaceManager_addNamespace(UA_NamespaceManager *namespaceMan
 		struct namespace_list_entry *newentry = UA_alloc(sizeof(struct namespace_list_entry));
 		newentry->namespace.index = index;
 		newentry->namespace.nodeStore = nodeStore;
+		UA_String_init(&newentry->namespace.url);
 		LIST_INSERT_HEAD(&namespaceManager->namespaces, newentry, pointers);
 		return UA_STATUSCODE_GOOD;
 	}

+ 1 - 1
src/server/ua_namespace_manager.h

@@ -11,7 +11,7 @@
 #include "ua_nodestore_interface.h"
 
 
-void  UA_NamespaceManager_new(UA_NamespaceManager** namespaceManager);
+UA_NamespaceManager* UA_NamespaceManager_new();
 
 UA_Int32  UA_NamespaceManager_addNamespace(UA_NamespaceManager *namespaceManager, UA_UInt16 index, UA_NodeStore *nodeStore);
 

+ 9 - 1
src/server/ua_server.c

@@ -41,7 +41,9 @@ void ns0_addObjectNode(UA_Server *server, UA_NodeId REFTYPE_NODEID,
 		UA_ExpandedNodeId REQ_NODEID, UA_ExpandedNodeId PARENTNODEID,
 		char* BROWSENAME, char* DISPLAYNAME, char* DESCRIPTION) {
 	UA_ObjectAttributes objAttr;
+	UA_ObjectAttributes_init(&objAttr);
 	UA_AddNodesItem addNodesItem;
+	UA_AddNodesItem_init(&addNodesItem);
 	UA_Namespace *ns0 = UA_NULL;
 	UA_NamespaceManager_getNamespace(server->namespaceManager, 0, &ns0);
 	addNodesItem.parentNodeId = PARENTNODEID;
@@ -68,7 +70,9 @@ void ns0_addVariableNode(UA_Server *server, UA_NodeId refTypeNodeId,
 		UA_QualifiedName browseName, UA_LocalizedText displayName, UA_LocalizedText description,
 		UA_DataValue *dataValue, UA_Int32 valueRank) {
 	UA_VariableAttributes varAttr;
+	UA_VariableAttributes_init(&varAttr);
 	UA_AddNodesItem addNodesItem;
+	UA_AddNodesItem_init(&addNodesItem);
 	UA_Namespace *ns0 = UA_NULL;
 	UA_NamespaceManager_getNamespace(server->namespaceManager, 0, &ns0);
 	addNodesItem.parentNodeId = parentNodeId;
@@ -114,6 +118,7 @@ void ADD_REFTYPENODE_NS0(UA_Server *server, UA_NodeId REFTYPE_NODEID,UA_Expanded
     UA_Namespace *ns0;
     UA_NamespaceManager_getNamespace(server->namespaceManager,0,&ns0);
 	UA_ReferenceTypeAttributes refTypeAttr;
+	UA_ReferenceTypeAttributes_init(&refTypeAttr);
     addNodesItem.parentNodeId= PARENTNODEID;
     addNodesItem.requestedNewNodeId = REQ_NODEID;
     addNodesItem.referenceTypeId = REFTYPE_NODEID;
@@ -142,8 +147,11 @@ UA_Server * UA_Server_new(UA_String *endpointUrl, UA_ByteString *serverCertifica
     UA_Server *server = UA_alloc(sizeof(UA_Server));
     if(!server)
         return server;
+
+    UA_ApplicationDescription_init(&server->description);
+
     //add namespace zero
-    UA_NamespaceManager_new(&server->namespaceManager);
+    server->namespaceManager = UA_NamespaceManager_new();
     UA_NamespaceManager_addNamespace(server->namespaceManager,0,ns0Nodestore);