- fix
authorMatthias Wachs <wachs@net.in.tum.de>
Wed, 2 May 2012 13:25:32 +0000 (13:25 +0000)
committerMatthias Wachs <wachs@net.in.tum.de>
Wed, 2 May 2012 13:25:32 +0000 (13:25 +0000)
src/transport/plugin_transport_udp.c
src/transport/plugin_transport_unix.c

index b1da80431e0ff5afa1c7a297f2c83c83c88eaa52..9e28f00d47216a895ea4a06079e6bdd71fa8c4a4 100644 (file)
@@ -380,11 +380,30 @@ udp_string_to_address (void *cls, const char *addr, uint16_t addrlen,
     void **buf, size_t *added)
 {
   struct sockaddr_storage socket_address;
-  int ret = GNUNET_STRINGS_to_address_ip (addr, addrlen,
+
+  if ((NULL == addr) || (addrlen == 0))
+  {
+    GNUNET_break (0);
+    return GNUNET_SYSERR;
+  }
+
+  if ('\0' != addr[addrlen - 1])
+  {
+    return GNUNET_SYSERR;
+  }
+
+  if (strlen (addr) != addrlen - 1)
+  {
+    return GNUNET_SYSERR;
+  }
+
+  int ret = GNUNET_STRINGS_to_address_ip (addr, strlen (addr),
     &socket_address);
 
   if (ret != GNUNET_OK)
+  {
     return GNUNET_SYSERR;
+  }
 
   if (socket_address.ss_family == AF_INET)
   {
@@ -395,6 +414,7 @@ udp_string_to_address (void *cls, const char *addr, uint16_t addrlen,
     u4->u4_port = in4->sin_port;
     *buf = u4;
     *added = sizeof (struct IPv4UdpAddress);
+    return GNUNET_OK;
   }
   else if (socket_address.ss_family == AF_INET6)
   {
@@ -405,6 +425,7 @@ udp_string_to_address (void *cls, const char *addr, uint16_t addrlen,
     u6->u6_port = in6->sin6_port;
     *buf = u6;
     *added = sizeof (struct IPv6UdpAddress);
+    return GNUNET_OK;
   }
   return GNUNET_SYSERR;
 }
index 9c29aeb14e714961a106f59b2e3da225b7c821a6..78025ab75bf78df61898eb004a8b4ffe007d0fbd 100644 (file)
@@ -1041,7 +1041,7 @@ unix_plugin_address_pretty_printer (void *cls, const char *type,
  *
  * @param cls closure ('struct Plugin*')
  * @param addr string address
- * @param addrlen length of the address
+ * @param addrlen length of the address (strlen(addr) + '\0')
  * @param buf location to store the buffer
  *        If the function returns GNUNET_SYSERR, its contents are undefined.
  * @param added length of created address
@@ -1057,14 +1057,20 @@ unix_string_to_address (void *cls, const char *addr, uint16_t addrlen,
     return GNUNET_SYSERR;
   }
 
-  char * tmp = GNUNET_malloc (addrlen + 1);
-  memcpy (tmp, addr, addrlen);
-  tmp[addrlen] = '\0';
+  if ('\0' != addr[addrlen - 1])
+  {
+    GNUNET_break (0);
+    return GNUNET_SYSERR;
+  }
 
-  //GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "`%s'\n", tmp);
+  if (strlen (addr) != addrlen - 1)
+  {
+    GNUNET_break (0);
+    return GNUNET_SYSERR;
+  }
 
-  (*buf) = tmp;
-  (*added) = strlen (tmp) + 1;
+  (*buf) = strdup (addr);
+  (*added) = strlen (addr) + 1;
   return GNUNET_OK;
 }