Static analyzer bug fixes
[silc.git] / lib / silcutil / silcnet.c
index 7fd76a4a3088db1a5a54e2021ccce8214f0253a1..60a8a47730407ed24698aa1998bd42a573031b72 100644 (file)
@@ -276,6 +276,14 @@ SilcBool silc_net_gethostbyname(const char *name,
   struct in_addr ip;
   char *tmp;
 
+  if (silc_net_is_ip4(name)) {
+    memset(address, 0, address_len);
+    if (address_len < strlen(name))
+      return FALSE;
+    strncpy(address, name, strlen(name));
+    return TRUE;
+  }
+
   hp = gethostbyname(name);
   if (!hp)
     return FALSE;
@@ -384,7 +392,8 @@ SilcBool silc_net_check_host_by_sock(SilcSocket sock, char **hostname,
 
   if (hostname)
     *hostname = NULL;
-  *ip = NULL;
+  if (ip)
+    *ip = NULL;
 
   SILC_LOG_DEBUG(("Resolving remote hostname and IP address"));
 
@@ -399,16 +408,19 @@ SilcBool silc_net_check_host_by_sock(SilcSocket sock, char **hostname,
                  NI_NUMERICHOST))
     return FALSE;
 
-  *ip = silc_memdup(s, strlen(s));
-  if (*ip == NULL)
-    return FALSE;
+  if (ip) {
+    *ip = silc_memdup(s, strlen(s));
+    if (*ip == NULL)
+      return FALSE;
+  }
 #else
   struct sockaddr_in remote;
   char *host_ip;
 
   if (hostname)
     *hostname = NULL;
-  *ip = NULL;
+  if (ip)
+    *ip = NULL;
 
   SILC_LOG_DEBUG(("Resolving remote hostname and IP address"));
 
@@ -422,15 +434,17 @@ SilcBool silc_net_check_host_by_sock(SilcSocket sock, char **hostname,
   if (!host_ip)
     return FALSE;
 
-  *ip = silc_memdup(host_ip, strlen(host_ip));
-  if (*ip == NULL)
-    return FALSE;
+  if (ip) {
+    *ip = silc_memdup(host_ip, strlen(host_ip));
+    if (*ip == NULL)
+      return FALSE;
+  }
 #endif
 
   /* Do reverse lookup if we want hostname too. */
   if (hostname) {
     /* Get host by address */
-    if (!silc_net_gethostbyaddr(*ip, host, sizeof(host)))
+    if (!ip || !silc_net_gethostbyaddr(*ip, host, sizeof(host)))
       return FALSE;
 
     *hostname = silc_memdup(host, strlen(host));
@@ -444,7 +458,8 @@ SilcBool silc_net_check_host_by_sock(SilcSocket sock, char **hostname,
       return FALSE;
   }
 
-  SILC_LOG_DEBUG(("Resolved IP address `%s'", *ip));
+  if (ip)
+    SILC_LOG_DEBUG(("Resolved IP address `%s'", *ip));
   return TRUE;
 }
 
@@ -463,7 +478,8 @@ SilcBool silc_net_check_local_by_sock(SilcSocket sock, char **hostname,
 
   if (hostname)
     *hostname = NULL;
-  *ip = NULL;
+  if (ip)
+    *ip = NULL;
 
   SILC_LOG_DEBUG(("Resolving local hostname and IP address"));
 
@@ -478,16 +494,19 @@ SilcBool silc_net_check_local_by_sock(SilcSocket sock, char **hostname,
                  NI_NUMERICHOST))
     return FALSE;
 
-  *ip = silc_memdup(s, strlen(s));
-  if (*ip == NULL)
-    return FALSE;
+  if (ip) {
+    *ip = silc_memdup(s, strlen(s));
+    if (*ip == NULL)
+      return FALSE;
+  }
 #else
   struct sockaddr_in local;
   char *host_ip;
 
   if (hostname)
     *hostname = NULL;
-  *ip = NULL;
+  if (ip)
+    *ip = NULL;
 
   SILC_LOG_DEBUG(("Resolving local hostname and IP address"));
 
@@ -501,15 +520,17 @@ SilcBool silc_net_check_local_by_sock(SilcSocket sock, char **hostname,
   if (!host_ip)
     return FALSE;
 
-  *ip = silc_memdup(host_ip, strlen(host_ip));
-  if (*ip == NULL)
-    return FALSE;
+  if (ip) {
+    *ip = silc_memdup(host_ip, strlen(host_ip));
+    if (*ip == NULL)
+      return FALSE;
+  }
 #endif
 
   /* Do reverse lookup if we want hostname too. */
   if (hostname) {
     /* Get host by address */
-    if (!silc_net_gethostbyaddr(*ip, host, sizeof(host)))
+    if (!ip || !silc_net_gethostbyaddr(*ip, host, sizeof(host)))
       return FALSE;
 
     *hostname = silc_memdup(host, strlen(host));
@@ -523,7 +544,8 @@ SilcBool silc_net_check_local_by_sock(SilcSocket sock, char **hostname,
       return FALSE;
   }
 
-  SILC_LOG_DEBUG(("Resolved IP address `%s'", *ip));
+  if (ip)
+    SILC_LOG_DEBUG(("Resolved IP address `%s'", *ip));
   return TRUE;
 }