]> granicus.if.org Git - php/commitdiff
Make sure to copy the right amount of mem over. IPv6 can be larger than struct sockaddr
authorDavid Walker <dave@mudsite.com>
Wed, 24 Aug 2016 17:22:05 +0000 (11:22 -0600)
committerDavid Walker <dave@mudsite.com>
Wed, 24 Aug 2016 17:22:05 +0000 (11:22 -0600)
ext/sockets/sockets.c

index c39a6172ae8c7310db2650d315743a74ae43764e..962fdbea664aa86a0d0899608821cf19eac15431 100644 (file)
@@ -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;