diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index ab0d7b81d79..93283ec4f07 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -1328,8 +1328,8 @@ PHP_FUNCTION(socket_connect) memset(&s_un, 0, sizeof(struct sockaddr_un)); s_un.sun_family = AF_UNIX; - snprintf(s_un.sun_path, 108, "%s", addr); - retval = connect(php_sock->bsd_socket, (struct sockaddr *) &s_un, SUN_LEN(&s_un)); + memcpy(&s_un.sun_path, addr, addr_len); + retval = connect(php_sock->bsd_socket, (struct sockaddr *) &s_un, (socklen_t) XtOffsetOf(struct sockaddr_un, sun_path) + addr_len); break; default: diff --git a/ext/sockets/tests/ipv4loop.phpt b/ext/sockets/tests/ipv4loop.phpt index 7c6c0db31ee..9fdcc17dad0 100644 --- a/ext/sockets/tests/ipv4loop.phpt +++ b/ext/sockets/tests/ipv4loop.phpt @@ -3,7 +3,7 @@ IPv4 Loopback test --SKIPIF-- --FILE-- diff --git a/ext/sockets/tests/ipv6loop.phpt b/ext/sockets/tests/ipv6loop.phpt index 45d2a05fc06..6fb584045f7 100644 --- a/ext/sockets/tests/ipv6loop.phpt +++ b/ext/sockets/tests/ipv6loop.phpt @@ -3,7 +3,7 @@ IPv6 Loopback test --SKIPIF-- +--FILE-- + +--EXPECT-- +string(10) "ABCdef123 +" diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c index 2e4763e5b8a..a7736878f4f 100644 --- a/main/streams/xp_socket.c +++ b/main/streams/xp_socket.c @@ -621,7 +621,7 @@ static inline int php_tcp_sockop_connect(php_stream *stream, php_netstream_data_ parse_unix_address(xparam, &unix_addr TSRMLS_CC); ret = php_network_connect_socket(sock->socket, - (const struct sockaddr *)&unix_addr, (socklen_t)sizeof(unix_addr), + (const struct sockaddr *)&unix_addr, (socklen_t) XtOffsetOf(struct sockaddr_un, sun_path) + xparam->inputs.namelen, xparam->op == STREAM_XPORT_OP_CONNECT_ASYNC, xparam->inputs.timeout, xparam->want_errortext ? &xparam->outputs.error_text : NULL, &err);