Browse Source

Fixes several scan coverity errors

Signed-off-by: CapXilinx <melik-merkumians@acin.tuwien.ac.at>
CapXilinx 8 năm trước cách đây
mục cha
commit
2557e22b44

+ 1 - 0
source/src/cip/cipioconnection.c

@@ -626,6 +626,7 @@ EipUint16 HandleConfigData(CipConnectionObject *connection_object) {
       CipByteArray *attribute_three = (CipByteArray *) GetCipAttribute(
         config_instance,
         3)->data;
+      OPENER_ASSERT(NULL != attribute_three);
       if (attribute_three->length != g_config_data_length) {
         connection_manager_status =
           kConnectionManagerExtendedStatusCodeErrorOwnershipConflict;

+ 29 - 27
source/src/enet_encap/cpf.c

@@ -164,34 +164,36 @@ EipStatus CreateCommonPacketFormatStructure(
     common_packet_format_data->data_item.data = (EipUint8 *)data;
     data += common_packet_format_data->data_item.length;
     length_count += (4 + common_packet_format_data->data_item.length);
-  }
-  for (int j = 0; j < (common_packet_format_data->item_count - 2); j++) /* TODO there needs to be a limit check here???*/
-  {
-    common_packet_format_data->address_info_item[j].type_id = GetIntFromMessage(
-      &data);
-    OPENER_TRACE_INFO("Sockaddr type id: %x\n",
-                      common_packet_format_data->address_info_item[j].type_id);
-    length_count += 2;
-    if ( (common_packet_format_data->address_info_item[j].type_id
-          == kCipItemIdSocketAddressInfoOriginatorToTarget)
-         || (common_packet_format_data->address_info_item[j].type_id
-             == kCipItemIdSocketAddressInfoTargetToOriginator) ) {
-      common_packet_format_data->address_info_item[j].length =
-        GetIntFromMessage(&data);
-      common_packet_format_data->address_info_item[j].sin_family =
-        GetIntFromMessage(&data);
-      common_packet_format_data->address_info_item[j].sin_port =
-        GetIntFromMessage(&data);
-      common_packet_format_data->address_info_item[j].sin_addr =
-        GetDintFromMessage(&data);
-      for (int i = 0; i < 8; i++) {
-        common_packet_format_data->address_info_item[j].nasin_zero[i] = *data;
-        data++;
+
+    for (size_t j = 0; j < (common_packet_format_data->item_count - 2); j++) /* TODO there needs to be a limit check here???*/
+    {
+      common_packet_format_data->address_info_item[j].type_id =
+        GetIntFromMessage(
+          &data);
+      OPENER_TRACE_INFO("Sockaddr type id: %x\n",
+                        common_packet_format_data->address_info_item[j].type_id);
+      length_count += 2;
+      if ( (common_packet_format_data->address_info_item[j].type_id
+            == kCipItemIdSocketAddressInfoOriginatorToTarget)
+           || (common_packet_format_data->address_info_item[j].type_id
+               == kCipItemIdSocketAddressInfoTargetToOriginator) ) {
+        common_packet_format_data->address_info_item[j].length =
+          GetIntFromMessage(&data);
+        common_packet_format_data->address_info_item[j].sin_family =
+          GetIntFromMessage(&data);
+        common_packet_format_data->address_info_item[j].sin_port =
+          GetIntFromMessage(&data);
+        common_packet_format_data->address_info_item[j].sin_addr =
+          GetDintFromMessage(&data);
+        for (size_t i = 0; i < 8; i++) {
+          common_packet_format_data->address_info_item[j].nasin_zero[i] = *data;
+          data++;
+        }
+        length_count += 18;
+      } else { /* no sockaddr item found */
+        common_packet_format_data->address_info_item[j].type_id = 0; /* mark as not set */
+        data -= 2;
       }
-      length_count += 18;
-    } else { /* no sockaddr item found */
-      common_packet_format_data->address_info_item[j].type_id = 0; /* mark as not set */
-      data -= 2;
     }
   }
   /* set the addressInfoItems to not set if they were not received */

+ 11 - 3
source/src/enet_encap/encap.c

@@ -19,6 +19,7 @@
 #include "generic_networkhandler.h"
 #include "trace.h"
 #include "socket_timer.h"
+#include "opener_error.h"
 
 /*Identity data from cipidentity.c*/
 extern EipUint16 vendor_id_;
@@ -745,9 +746,16 @@ void CloseEncapsulationSessionBySockAddr(
     if (kEipInvalidSocket != g_registered_sessions[i]) {
       struct sockaddr_in encapsulation_session_addr = {0};
       socklen_t addrlength = sizeof(encapsulation_session_addr);
-      int error_code = getpeername(g_registered_sessions[i],
-                                   &encapsulation_session_addr,
-                                   &addrlength);
+      if (getpeername(g_registered_sessions[i], &encapsulation_session_addr,
+                      &addrlength) <= 0) {                                                                  /* got error */
+        int error_code = GetSocketErrorNumber();
+        char *error_message = GetErrorMessage(error_code);
+        OPENER_TRACE_ERR(
+          "encap.c: error on getting peer name on closing session: %d - %s\n",
+          error_code,
+          error_message);
+        FreeErrorMessage(error_message);
+      }
       if(encapsulation_session_addr.sin_addr.s_addr ==
          connection_object->originator_address.sin_addr.s_addr) {
         CloseSession(g_registered_sessions[i]);

+ 4 - 3
source/src/ports/POSIX/networkhandler.c

@@ -53,9 +53,10 @@ int SetSocketToNonBlocking(int socket_handle) {
                                              0) | O_NONBLOCK);
 }
 
-void SetQosOnSocket(int socket,
-                    CipUsint qos_value) {
+//TODO: Return setsocket return value
+int SetQosOnSocket(int socket,
+                   CipUsint qos_value) {
 
   int set_tos = qos_value;
-  setsockopt(socket, IPPROTO_IP, IP_TOS, &set_tos, sizeof(set_tos) );
+  return setsockopt(socket, IPPROTO_IP, IP_TOS, &set_tos, sizeof(set_tos) );
 }

+ 2 - 2
source/src/ports/POSIX/networkhandler.h

@@ -41,7 +41,7 @@ MicroSeconds GetMicroSeconds(void);
  */
 MilliSeconds GetMilliSeconds(void);
 
-void SetQosOnSocket(int socket,
-                    CipUsint qos_value);
+int SetQosOnSocket(int socket,
+                   CipUsint qos_value);
 
 #endif /* OPENER_NETWORKHANDLER_H_ */

+ 40 - 7
source/src/ports/generic_networkhandler.c

@@ -96,7 +96,11 @@ EipStatus NetworkHandlerInitialize(void) {
     return kEipStatusError;
   }
 
-  SetSocketToNonBlocking(g_network_status.tcp_listener);
+  if (SetSocketToNonBlocking(g_network_status.tcp_listener) < 0) {
+    OPENER_TRACE_ERR(
+      "error setting socket to non-blocking on new socket\n");
+    return kEipStatusError;
+  }
 
   /* create a new UDP socket */
   if ( ( g_network_status.udp_global_broadcast_listener = socket(AF_INET,
@@ -134,7 +138,12 @@ EipStatus NetworkHandlerInitialize(void) {
     return kEipStatusError;
   }
 
-  SetSocketToNonBlocking(g_network_status.udp_global_broadcast_listener);
+  if (SetSocketToNonBlocking(g_network_status.udp_global_broadcast_listener) <
+      0) {
+    OPENER_TRACE_ERR(
+      "error setting socket to non-blocking on new socket\n");
+    return kEipStatusError;
+  }
 
   /* Activates address reuse */
   if (setsockopt( g_network_status.udp_unicast_listener, SOL_SOCKET,
@@ -145,7 +154,11 @@ EipStatus NetworkHandlerInitialize(void) {
     return kEipStatusError;
   }
 
-  SetSocketToNonBlocking(g_network_status.udp_unicast_listener);
+  if (SetSocketToNonBlocking(g_network_status.udp_unicast_listener) < 0) {
+    OPENER_TRACE_ERR(
+      "error setting socket to non-blocking on udp_unicast_listener\n");
+    return kEipStatusError;
+  }
 
   struct sockaddr_in my_address = { .sin_family = AF_INET, .sin_port = htons(
                                       kOpenerEthernetPort),
@@ -289,7 +302,15 @@ void CheckAndHandleTcpListenerSocket(void) {
       return;
     }
 
-    SetQosOnSocket( new_socket, GetPriorityForSocket(0xFFF) );
+    if (SetQosOnSocket( new_socket, GetPriorityForSocket(0xFFF) ) <= 0) { /* got error */
+      int error_code = GetSocketErrorNumber();
+      char *error_message = GetErrorMessage(error_code);
+      OPENER_TRACE_ERR(
+        "networkhandler: error on set QoS on socket on new socket: %d - %s\n",
+        error_code,
+        error_message);
+      FreeErrorMessage(error_message);
+    }
 
     OPENER_TRACE_INFO(">>> network handler: accepting new TCP socket: %d \n",
                       new_socket);
@@ -635,7 +656,6 @@ EipStatus HandleDataOnTcpSocket(int socket) {
       }
     } while (0 < data_size);
     SocketTimerSetLastUpdate(socket_timer, g_actual_time);
-    OPENER_ASSERT(0 <= data_size);
     return kEipStatusOk;
   }
 
@@ -759,8 +779,21 @@ int CreateUdpSocket(UdpCommuncationDirection communication_direction,
     return kEipInvalidSocket;
   }
 
-  SetSocketToNonBlocking(new_socket);
-  SetQosOnSocket(new_socket, GetPriorityForSocket(qos_for_socket) );
+  if (SetSocketToNonBlocking(new_socket) < 0) {
+    OPENER_TRACE_ERR(
+      "error setting socket to non-blocking on new socket\n");
+    return kEipStatusError;
+  }
+
+  if (SetQosOnSocket(new_socket, GetPriorityForSocket(qos_for_socket) ) <= 0) { /* got error */
+    int error_code = GetSocketErrorNumber();
+    char *error_message = GetErrorMessage(error_code);
+    OPENER_TRACE_ERR(
+      "networkhandler: error on set QoS on socket on new socket: %d - %s\n",
+      error_code,
+      error_message);
+    FreeErrorMessage(error_message);
+  }
 
   OPENER_TRACE_INFO("networkhandler: UDP socket %d\n", new_socket);