From d59af68fd9d8babba99fa52291982c279a5aae40 Mon Sep 17 00:00:00 2001 From: David Walker Date: Wed, 24 Aug 2016 11:22:05 -0600 Subject: [PATCH] Make sure to copy the right amount of mem over. IPv6 can be larger than struct sockaddr --- ext/sockets/sockets.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index c39a6172ae..962fdbea66 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -2533,7 +2533,7 @@ PHP_FUNCTION(socket_addrinfo_lookup) if (strcmp(ZSTR_VAL(key), "ai_flags") == 0) { hints.ai_flags = Z_LVAL_P(hint); } else if (strcmp(ZSTR_VAL(key), "ai_socktype") == 0) { - hints.ai_socktype= Z_LVAL_P(hint); + hints.ai_socktype = Z_LVAL_P(hint); } else if (strcmp(ZSTR_VAL(key), "ai_protocol") == 0) { hints.ai_protocol = Z_LVAL_P(hint); } else if (strcmp(ZSTR_VAL(key), "ai_family") == 0) { @@ -2556,8 +2556,8 @@ PHP_FUNCTION(socket_addrinfo_lookup) res = emalloc(sizeof(struct addrinfo)); memcpy(res, rp, sizeof(struct addrinfo)); - res->ai_addr = emalloc(sizeof(struct sockaddr)); - memcpy(res->ai_addr, rp->ai_addr, sizeof(struct sockaddr)); + res->ai_addr = emalloc(rp->ai_addrlen); + memcpy(res->ai_addr, rp->ai_addr, rp->ai_addrlen); if (rp->ai_canonname != NULL) { res->ai_canonname = estrdup(rp->ai_canonname); @@ -2723,7 +2723,7 @@ PHP_FUNCTION(socket_addrinfo_explain) } array_init(&sockaddr); - switch(ai->ai_addr->sa_family) { + switch(ai->ai_family) { case AF_INET: { struct sockaddr_in *sa = (struct sockaddr_in *) ai->ai_addr; -- 2.50.1