From 8d41d1ca658e8e66341f1cd1427ab639d3431599 Mon Sep 17 00:00:00 2001 From: Kareem Date: Wed, 15 Oct 2025 15:47:22 -0700 Subject: [PATCH 1/2] Add IPv6 support to wolfSSL_BIO_new_accept and wolfIO_TcpBind. --- src/bio.c | 9 ++++++++- src/wolfio.c | 12 ++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/bio.c b/src/bio.c index 7dad889fa..f22050aef 100644 --- a/src/bio.c +++ b/src/bio.c @@ -2442,7 +2442,14 @@ int wolfSSL_BIO_flush(WOLFSSL_BIO* bio) WOLFSSL_ENTER("wolfSSL_BIO_new_accept"); bio = wolfSSL_BIO_new(wolfSSL_BIO_s_socket()); if (bio) { - bio->port = (word16)XATOI(port); + const char* portStr = port; +#ifdef WOLFSSL_IPV6 + const char* ipv6End = XSTRSTR(port, "]"); + if (ipv6End) { + portStr = XSTRSTR(ipv6End, ":"); + } +#endif + bio->port = (word16)XATOI(portStr); bio->type = WOLFSSL_BIO_SOCKET; } return bio; diff --git a/src/wolfio.c b/src/wolfio.c index 62e78f10c..a55b27acd 100644 --- a/src/wolfio.c +++ b/src/wolfio.c @@ -1508,8 +1508,13 @@ int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port) #ifdef HAVE_SOCKADDR int ret = 0; SOCKADDR_S addr; +#ifdef WOLFSSL_IPV6 + socklen_t sockaddr_len = sizeof(SOCKADDR_IN6); + SOCKADDR_IN6 *sin = (SOCKADDR_IN6 *)&addr; +#else socklen_t sockaddr_len = sizeof(SOCKADDR_IN); SOCKADDR_IN *sin = (SOCKADDR_IN *)&addr; +#endif if (sockfd == NULL || port < 1) { return WOLFSSL_FATAL_ERROR; @@ -1517,10 +1522,17 @@ int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port) XMEMSET(&addr, 0, sizeof(addr)); +#ifdef WOLFSSL_IPV6 + sin->sin6_family = AF_INET6; + sin->sin6_addr = in6addr_any; + sin->sin6_port = XHTONS(port); + *sockfd = (SOCKET_T)socket(AF_INET6, SOCK_STREAM, 0); +#else sin->sin_family = AF_INET; sin->sin_addr.s_addr = INADDR_ANY; sin->sin_port = XHTONS(port); *sockfd = (SOCKET_T)socket(AF_INET, SOCK_STREAM, 0); +#endif #ifdef USE_WINDOWS_API if (*sockfd == SOCKET_INVALID) From fbb7ae225706d2c200746a53c20e374dbd2ac461 Mon Sep 17 00:00:00 2001 From: Kareem Date: Tue, 11 Nov 2025 16:20:09 -0700 Subject: [PATCH 2/2] Add NULL check to wolfSSL_BIO_new_accept. --- src/bio.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/bio.c b/src/bio.c index f22050aef..8321dabbd 100644 --- a/src/bio.c +++ b/src/bio.c @@ -2440,6 +2440,11 @@ int wolfSSL_BIO_flush(WOLFSSL_BIO* bio) { WOLFSSL_BIO *bio; WOLFSSL_ENTER("wolfSSL_BIO_new_accept"); + + if (port == NULL) { + return NULL; + } + bio = wolfSSL_BIO_new(wolfSSL_BIO_s_socket()); if (bio) { const char* portStr = port;