[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] branch master updated: fix #8046
From: |
gnunet |
Subject: |
[gnunet] branch master updated: fix #8046 |
Date: |
Tue, 09 Jan 2024 19:09:28 +0100 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository gnunet.
The following commit(s) were added to refs/heads/master by this push:
new 86323ede5 fix #8046
86323ede5 is described below
commit 86323ede5601f5ae0e1a3a8d097406bcc64f4dfc
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Tue Jan 9 19:08:28 2024 +0100
fix #8046
---
src/include/gnunet_strings_lib.h | 4 +-
src/lib/util/strings.c | 111 +++++++++++++++++++++------------------
2 files changed, 61 insertions(+), 54 deletions(-)
diff --git a/src/include/gnunet_strings_lib.h b/src/include/gnunet_strings_lib.h
index be41fb1d9..f5aaf7014 100644
--- a/src/include/gnunet_strings_lib.h
+++ b/src/include/gnunet_strings_lib.h
@@ -578,7 +578,7 @@ GNUNET_STRINGS_check_filename (const char *filename,
*/
enum GNUNET_GenericReturnValue
GNUNET_STRINGS_to_address_ipv6 (const char *zt_addr,
- uint16_t addrlen,
+ size_t addrlen,
struct sockaddr_in6 *r_buf);
@@ -594,7 +594,7 @@ GNUNET_STRINGS_to_address_ipv6 (const char *zt_addr,
*/
enum GNUNET_GenericReturnValue
GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr,
- uint16_t addrlen,
+ size_t addrlen,
struct sockaddr_in *r_buf);
diff --git a/src/lib/util/strings.c b/src/lib/util/strings.c
index 4f729771c..493d20f1e 100644
--- a/src/lib/util/strings.c
+++ b/src/lib/util/strings.c
@@ -1031,70 +1031,77 @@ GNUNET_STRINGS_check_filename (const char *filename,
enum GNUNET_GenericReturnValue
GNUNET_STRINGS_to_address_ipv6 (const char *zt_addr,
- uint16_t addrlen,
+ size_t addrlen,
struct sockaddr_in6 *r_buf)
{
- char zbuf[addrlen + 1];
- int ret;
- char *port_colon;
- unsigned int port;
- char dummy[2];
-
if (addrlen < 6)
return GNUNET_SYSERR;
- GNUNET_memcpy (zbuf, zt_addr, addrlen);
- if ('[' != zbuf[0])
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- _ ("IPv6 address did not start with `['\n"));
- return GNUNET_SYSERR;
- }
- zbuf[addrlen] = '\0';
- port_colon = strrchr (zbuf, ':');
- if (NULL == port_colon)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- _ ("IPv6 address did contain ':' to separate port number\n"));
- return GNUNET_SYSERR;
- }
- if (']' != *(port_colon - 1))
+ if (addrlen > 512)
+ return GNUNET_SYSERR; /* sanity check to protect zbuf allocation,
+ actual limit is not precise */
{
- GNUNET_log (
- GNUNET_ERROR_TYPE_WARNING,
- _ ("IPv6 address did contain ']' before ':' to separate port number\n"));
- return GNUNET_SYSERR;
- }
- ret = sscanf (port_colon, ":%u%1s", &port, dummy);
- if ((1 != ret) || (port > 65535))
- {
- GNUNET_log (
- GNUNET_ERROR_TYPE_WARNING,
- _ ("IPv6 address did contain a valid port number after the last ':'\n"));
- return GNUNET_SYSERR;
- }
- *(port_colon - 1) = '\0';
- memset (r_buf, 0, sizeof(struct sockaddr_in6));
- ret = inet_pton (AF_INET6, &zbuf[1], &r_buf->sin6_addr);
- if (ret <= 0)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- _ ("Invalid IPv6 address `%s': %s\n"),
- &zbuf[1],
- strerror (errno));
- return GNUNET_SYSERR;
- }
- r_buf->sin6_port = htons (port);
- r_buf->sin6_family = AF_INET6;
+ char zbuf[addrlen + 1];
+ int ret;
+ char *port_colon;
+ unsigned int port;
+ char dummy[2];
+
+ GNUNET_memcpy (zbuf, zt_addr, addrlen);
+ if ('[' != zbuf[0])
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ _ ("IPv6 address did not start with `['\n"));
+ return GNUNET_SYSERR;
+ }
+ zbuf[addrlen] = '\0';
+ port_colon = strrchr (zbuf, ':');
+ if (NULL == port_colon)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ _ ("IPv6 address did contain ':' to separate port
number\n"));
+ return GNUNET_SYSERR;
+ }
+ if (']' != *(port_colon - 1))
+ {
+ GNUNET_log (
+ GNUNET_ERROR_TYPE_WARNING,
+ _ (
+ "IPv6 address did contain ']' before ':' to separate port
number\n"));
+ return GNUNET_SYSERR;
+ }
+ ret = sscanf (port_colon, ":%u%1s", &port, dummy);
+ if ((1 != ret) || (port > 65535))
+ {
+ GNUNET_log (
+ GNUNET_ERROR_TYPE_WARNING,
+ _ (
+ "IPv6 address did contain a valid port number after the last
':'\n"));
+ return GNUNET_SYSERR;
+ }
+ *(port_colon - 1) = '\0';
+ memset (r_buf, 0, sizeof(struct sockaddr_in6));
+ ret = inet_pton (AF_INET6, &zbuf[1], &r_buf->sin6_addr);
+ if (ret <= 0)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ _ ("Invalid IPv6 address `%s': %s\n"),
+ &zbuf[1],
+ strerror (errno));
+ return GNUNET_SYSERR;
+ }
+ r_buf->sin6_port = htons (port);
+ r_buf->sin6_family = AF_INET6;
#if HAVE_SOCKADDR_IN_SIN_LEN
- r_buf->sin6_len = (u_char) sizeof(struct sockaddr_in6);
+ r_buf->sin6_len = (u_char) sizeof(struct sockaddr_in6);
#endif
- return GNUNET_OK;
+ return GNUNET_OK;
+ }
}
enum GNUNET_GenericReturnValue
GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr,
- uint16_t addrlen,
+ size_t addrlen,
struct sockaddr_in *r_buf)
{
unsigned int temps[4];
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnunet] branch master updated: fix #8046,
gnunet <=