This is an automated email from the ASF dual-hosted git repository.

ChristopherSchultz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat-connectors.git

commit 7966dd1e427d953d7391b57c28aba310d37f8696
Author: Christopher Schultz <[email protected]>
AuthorDate: Mon Jun 8 12:29:29 2026 -0400

    Use sockaddr_storage to ensure we have enough space for IPv6
---
 native/common/jk_connect.c | 39 +++++++++++++++++++++------------------
 1 file changed, 21 insertions(+), 18 deletions(-)

diff --git a/native/common/jk_connect.c b/native/common/jk_connect.c
index 0bd124c26..5477be83b 100644
--- a/native/common/jk_connect.c
+++ b/native/common/jk_connect.c
@@ -1316,26 +1316,27 @@ char *jk_dump_hinfo(jk_sockaddr_t *saddr, char *buf, 
size_t size)
 
 char *jk_dump_sinfo(jk_sock_t sd, char *buf, size_t size)
 {
-    struct sockaddr rsaddr;
-    struct sockaddr lsaddr;
+    struct sockaddr_storage rsaddr;
+    struct sockaddr_storage lsaddr;
     socklen_t       salen;
 
-    salen = sizeof(struct sockaddr);
+    salen = sizeof(lsaddr);
     if (getsockname(sd, &lsaddr, &salen) == 0) {
-        salen = sizeof(struct sockaddr);
+        salen = sizeof(rsaddr);
         if (getpeername(sd, &rsaddr, &salen) == 0) {
             char   pb[8];
             size_t ps;
-            if (lsaddr.sa_family == JK_INET) {
-                struct sockaddr_in  *sa = (struct sockaddr_in  *)&lsaddr;
-                inet_ntop4((unsigned char *)&sa->sin_addr, buf, size);
-                snprintf(pb, sizeof(pb), ":%u", ntohs(sa->sin_port));
+            struct sockaddr *sa = (struct sockaddr *)&lsaddr;
+            if (sa->sa_family == JK_INET) {
+                struct sockaddr_in *insa = (struct sockaddr_in *)&lsaddr;
+                inet_ntop4((unsigned char *)&insa->sin_addr, buf, size);
+                snprintf(pb, sizeof(pb), ":%u", ntohs(insa->sin_port));
             }
 #if JK_HAVE_IPV6
             else {
-                struct sockaddr_in6 *sa = (struct sockaddr_in6 *)&lsaddr;
-                inet_ntop6((unsigned char *)&sa->sin6_addr, buf, size);
-                snprintf(pb, sizeof(pb), ":%u", ntohs(sa->sin6_port));
+                struct sockaddr_in6 *insa = (struct sockaddr_in6 *)&lsaddr;
+                inet_ntop6((unsigned char *)&insa->sin6_addr, buf, size);
+                snprintf(pb, sizeof(pb), ":%u", ntohs(insa->sin6_port));
             }
 #endif
             ps = strlen(buf);
@@ -1343,16 +1344,18 @@ char *jk_dump_sinfo(jk_sock_t sd, char *buf, size_t 
size)
             ps = strlen(buf);
             strncat(buf, " -> ", size - ps - 1);
             ps = strlen(buf);
-            if (rsaddr.sa_family == JK_INET) {
-                struct sockaddr_in  *sa = (struct sockaddr_in  *)&rsaddr;
-                inet_ntop4((unsigned char *)&sa->sin_addr,  buf + ps, size - 
ps);
-                snprintf(pb, sizeof(pb), ":%u", ntohs(sa->sin_port));
+
+            sa = (struct sockaddr *)&rsaddr;
+            if (sa->sa_family == JK_INET) {
+                struct sockaddr_in *insa = (struct sockaddr_in *)&rsaddr;
+                inet_ntop4((unsigned char *)&insa->sin_addr,  buf + ps, size - 
ps);
+                snprintf(pb, sizeof(pb), ":%u", ntohs(insa->sin_port));
             }
 #if JK_HAVE_IPV6
             else {
-                struct sockaddr_in6 *sa = (struct sockaddr_in6 *)&rsaddr;
-                inet_ntop6((unsigned char *)&sa->sin6_addr, buf + ps, size - 
ps);
-                snprintf(pb, sizeof(pb), ":%u", ntohs(sa->sin6_port));
+                struct sockaddr_in6 *insa = (struct sockaddr_in6 *)&rsaddr;
+                inet_ntop6((unsigned char *)&insa->sin6_addr, buf + ps, size - 
ps);
+                snprintf(pb, sizeof(pb), ":%u", ntohs(insa->sin6_port));
             }
 #endif
             strncat(buf, pb, size - strlen(buf) - 1);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to