diff options
author | Michael Wallner <mike@php.net> | 2014-04-02 11:09:26 +0200 |
---|---|---|
committer | Michael Wallner <mike@php.net> | 2014-04-02 11:09:26 +0200 |
commit | 91a9d24aa30507e6c7d8937db2de24394f0ce121 (patch) | |
tree | e7f50691e3e5942fa70f45e439fa79dd59bfb65d | |
parent | f244513fc059a9b7ee2b91ad65f1a2f013b5d588 (diff) | |
download | php-git-91a9d24aa30507e6c7d8937db2de24394f0ce121.tar.gz |
Fix bug #64330
stream_socket_server() creates wrong Abstract Namespace UNIX sockets
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | ext/standard/tests/network/bug64330.phpt | 20 | ||||
-rw-r--r-- | main/streams/xp_socket.c | 3 |
3 files changed, 27 insertions, 1 deletions
@@ -1,6 +1,11 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2014, PHP 5.4.28 + +- Core: + . Fixed bug #64330 (stream_socket_server() creates wrong Abstract Namespace + UNIX sockets). (Mike) + - Embed: . Fixed bug #65715 (php5embed.lib isn't provided anymore). (Anatol) diff --git a/ext/standard/tests/network/bug64330.phpt b/ext/standard/tests/network/bug64330.phpt new file mode 100644 index 0000000000..1ea305cb5f --- /dev/null +++ b/ext/standard/tests/network/bug64330.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug #64330 (stream_socket_server() creates wrong Abstract Namespace UNIX sockets) +--SKIPIF-- +<?php +if (!in_array("unix", stream_get_transports())) die("SKIP unix domain sockets unavailable"); +?> +--FILE-- +<?php +echo "Test\n"; +$server = stream_socket_server("unix://\x00/MyBindName"); +$client = stream_socket_client("unix://\x00/MyBindName"); +if ($client) { + echo "ok\n"; +} +?> +===DONE=== +--EXPECT-- +Test +ok +===DONE=== diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c index 2c7ca8d414..53f0769a1c 100644 --- a/main/streams/xp_socket.c +++ b/main/streams/xp_socket.c @@ -588,7 +588,8 @@ static inline int php_tcp_sockop_bind(php_stream *stream, php_netstream_data_t * parse_unix_address(xparam, &unix_addr TSRMLS_CC); - return bind(sock->socket, (struct sockaddr *)&unix_addr, sizeof(unix_addr)); + return bind(sock->socket, (const struct sockaddr *)&unix_addr, + (socklen_t) XtOffsetOf(struct sockaddr_un, sun_path) + xparam->inputs.namelen); } #endif |