Browse Source

remove coverity issues

Julius Pfrommer 10 years ago
parent
commit
5e53269fcb
4 changed files with 27 additions and 23 deletions
  1. 19 16
      src/server/ua_server.c
  2. 1 0
      src/server/ua_services_view.c
  3. 4 4
      src/ua_types.c
  4. 3 3
      src/ua_types_encoding_binary.c

+ 19 - 16
src/server/ua_server.c

@@ -120,34 +120,37 @@ void UA_Server_delete(UA_Server *server) {
  * Todo: make this thread-safe
  */
 static void UA_Server_cleanup(UA_Server *server, void *nothing) {
-    printf( "cleaning up...\n");
-    fflush(stdout);
     UA_DateTime now = UA_DateTime_now();
-    channel_list_entry *entry;
+    channel_list_entry *entry = LIST_FIRST(&server->secureChannelManager.channels);
     /* remove channels that were not renewed or who have no connection attached */
-    LIST_FOREACH(entry, &server->secureChannelManager.channels, pointers) {
+    while(entry) {
         if(entry->channel.securityToken.createdAt +
            (10000 * entry->channel.securityToken.revisedLifetime) > now ||
-           entry->channel.connection)
-            continue;
-        UA_Connection *c = entry->channel.connection;
-        UA_Connection_detachSecureChannel(c);
-        if(c) {
-            c->close(c);
+           entry->channel.connection) {
+            entry = LIST_NEXT(entry, pointers);
+        } else {
+            channel_list_entry *next = LIST_NEXT(entry, pointers);
+            LIST_REMOVE(entry, pointers);
+            UA_Connection *c = entry->channel.connection;
+            UA_Connection_detachSecureChannel(c);
+            if(c)
+                c->close(c);
+            UA_SecureChannel_detachSession(&entry->channel);
+            UA_SecureChannel_deleteMembers(&entry->channel);
+            UA_free(entry);
+            entry = next;
         }
-        UA_SecureChannel_detachSession(&entry->channel);
-        UA_SecureChannel_deleteMembers(&entry->channel);
-        LIST_REMOVE(entry, pointers);
-        UA_free(entry);
     }
 
-    session_list_entry *sentry;
-    LIST_FOREACH(sentry, &server->sessionManager.sessions, pointers) {
+    session_list_entry *sentry = LIST_FIRST(&server->sessionManager.sessions);
+    while(sentry) {
         if(sentry->session.validTill < now) {
+            session_list_entry *next = LIST_NEXT(sentry, pointers);
             LIST_REMOVE(sentry, pointers);
             UA_SecureChannel_detachSession(sentry->session.channel);
             UA_Session_deleteMembers(&sentry->session);
             UA_free(sentry);
+            sentry = next;
         }
     }
 }

+ 1 - 0
src/server/ua_services_view.c

@@ -84,6 +84,7 @@ static UA_StatusCode findsubtypes(UA_NodeStore *ns, const UA_NodeId *root, UA_No
     const UA_Node *node = UA_NodeStore_get(ns, root);
     if(!node || node->nodeClass != UA_NODECLASS_REFERENCETYPE)  {
         UA_NodeStore_release(node);
+        UA_free(results);
         return UA_STATUSCODE_BADREFERENCETYPEIDINVALID;
     }
     UA_NodeStore_release(node);

+ 4 - 4
src/ua_types.c

@@ -870,7 +870,7 @@ void UA_init(void *p, const UA_DataType *dataType) {
         ptr += member->padding;
         if(!member->namespaceZero) {
             // pointer arithmetic
-            const UA_DataType *memberType = dataType - dataType->typeIndex + member->memberTypeIndex;
+            const UA_DataType *memberType = &dataType[member->memberTypeIndex - dataType->typeIndex];
             UA_init((void*)ptr, memberType);
             ptr += memberType->memSize;
             continue;
@@ -953,7 +953,7 @@ UA_StatusCode UA_copy(const void *src, void *dst, const UA_DataType *dataType) {
         if(member->namespaceZero)
             memberType = &UA_TYPES[member->memberTypeIndex];
         else
-            memberType = dataType - dataType->typeIndex + member->memberTypeIndex;
+            memberType = &dataType[member->memberTypeIndex - dataType->typeIndex];
 
         if(member->isArray) {
             ptrs += (member->padding >> 3);
@@ -1059,7 +1059,7 @@ void UA_deleteMembers(void *p, const UA_DataType *dataType) {
         if(member->namespaceZero)
             memberType = &UA_TYPES[member->memberTypeIndex];
         else
-            memberType = dataType - dataType->typeIndex + member->memberTypeIndex;
+            memberType = &dataType[member->memberTypeIndex - dataType->typeIndex];
 
         if(member->isArray) {
             ptr += (member->padding >> 3);
@@ -1171,7 +1171,7 @@ UA_StatusCode UA_Array_copy(const void *src, void **dst, const UA_DataType *data
     uintptr_t ptrs = (uintptr_t)src;
     uintptr_t ptrd = (uintptr_t)*dst;
     UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    for(int i=0;i<noElements; i++) {
+    for(int i = 0; i < noElements; i++) {
         retval = UA_copy((void*)ptrs, (void*)ptrd, dataType);
         ptrs += dataType->memSize;
         ptrd += dataType->memSize;

+ 3 - 3
src/ua_types_encoding_binary.c

@@ -908,7 +908,7 @@ size_t UA_calcSizeBinary(const void *p, const UA_DataType *dataType) {
         if(member->namespaceZero)
             memberType = &UA_TYPES[member->memberTypeIndex];
         else
-            memberType = dataType - dataType->typeIndex + member->memberTypeIndex;
+            memberType = &dataType[member->memberTypeIndex - dataType->typeIndex];
 
         if(member->isArray) {
             ptr += (member->padding >> 3);
@@ -991,7 +991,7 @@ UA_StatusCode UA_encodeBinary(const void *src, const UA_DataType *dataType, UA_B
         if(member->namespaceZero)
             memberType = &UA_TYPES[member->memberTypeIndex];
         else
-            memberType = dataType - dataType->typeIndex + member->memberTypeIndex;
+            memberType = &dataType[member->memberTypeIndex - dataType->typeIndex];
 
         if(member->isArray) {
             ptr += (member->padding >> 3);
@@ -1075,7 +1075,7 @@ UA_StatusCode UA_decodeBinary(const UA_ByteString *src, size_t *offset, void *ds
         if(member->namespaceZero)
             memberType = &UA_TYPES[member->memberTypeIndex];
         else
-            memberType = dataType - dataType->typeIndex + member->memberTypeIndex;
+            memberType = &dataType[member->memberTypeIndex - dataType->typeIndex] ;
 
         if(member->isArray) {
             ptr += (member->padding >> 3);