]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-5.6' into PHP-7.0
authorXinchen Hui <laruence@gmail.com>
Sun, 19 Jun 2016 04:33:54 +0000 (21:33 -0700)
committerXinchen Hui <laruence@gmail.com>
Sun, 19 Jun 2016 04:33:54 +0000 (21:33 -0700)
Conflicts:
main/streams/xp_socket.c

1  2 
main/streams/xp_socket.c

index 7a21fbef4458dacc1306d531df40a51f5057aade,90c5df0b8aa9f80c98197783f258e3473404a471..bf7e98c56b2f5fb8af193fa54ebbfb63fe08fe53
@@@ -262,22 -243,33 +262,32 @@@ static inline int sock_sendto(php_netst
  }
  
  static inline int sock_recvfrom(php_netstream_data_t *sock, char *buf, size_t buflen, int flags,
 -              char **textaddr, long *textaddrlen,
 +              zend_string **textaddr,
                struct sockaddr **addr, socklen_t *addrlen
 -              TSRMLS_DC)
 +              )
  {
-       php_sockaddr_storage sa;
-       socklen_t sl = sizeof(sa);
        int ret;
        int want_addr = textaddr || addr;
  
        if (want_addr) {
 -              ret = recvfrom(sock->socket, buf, buflen, flags, (struct sockaddr*)&sa, &sl);
+               php_sockaddr_storage sa;
+               socklen_t sl = sizeof(sa);
 +              ret = recvfrom(sock->socket, buf, XP_SOCK_BUF_SIZE(buflen), flags, (struct sockaddr*)&sa, &sl);
                ret = (ret == SOCK_CONN_ERR) ? -1 : ret;
-               php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl,
-                       textaddr, addr, addrlen);
+               if (sl) {
+                       php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl,
 -                                      textaddr, textaddrlen, addr, addrlen TSRMLS_CC);
++                                      textaddr, addr, addrlen);
+               } else {
+                       if (textaddr) {
 -                              *textaddr = estrndup("", 0);
 -                              *textaddrlen = 0;
++                              *textaddr = ZSTR_EMPTY_ALLOC();
+                       }
+                       if (addr) {
+                               *addr = NULL;
+                               *addrlen = 0;
+                       }
+               }
        } else {
 -              ret = recv(sock->socket, buf, buflen, flags);
 +              ret = recv(sock->socket, buf, XP_SOCK_BUF_SIZE(buflen), flags);
                ret = (ret == SOCK_CONN_ERR) ? -1 : ret;
        }