From: David Walker Date: Wed, 24 Aug 2016 17:22:05 +0000 (-0600) Subject: Make sure to copy the right amount of mem over. IPv6 can be larger than struct sockaddr X-Git-Tag: php-7.2.0alpha1~1368^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d59af68fd9d8babba99fa52291982c279a5aae40;p=php Make sure to copy the right amount of mem over. IPv6 can be larger than struct sockaddr --- 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;