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)
{
u4->u4_port = in4->sin_port;
*buf = u4;
*added = sizeof (struct IPv4UdpAddress);
+ return GNUNET_OK;
}
else if (socket_address.ss_family == AF_INET6)
{
u6->u6_port = in6->sin6_port;
*buf = u6;
*added = sizeof (struct IPv6UdpAddress);
+ return GNUNET_OK;
}
return GNUNET_SYSERR;
}
*
* @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
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;
}