]> granicus.if.org Git - php/commitdiff
Fix bug #64330
authorMichael Wallner <mike@php.net>
Wed, 2 Apr 2014 09:09:26 +0000 (11:09 +0200)
committerMichael Wallner <mike@php.net>
Wed, 2 Apr 2014 09:09:26 +0000 (11:09 +0200)
stream_socket_server() creates wrong Abstract Namespace UNIX sockets

NEWS
ext/standard/tests/network/bug64330.phpt [new file with mode: 0644]
main/streams/xp_socket.c

diff --git a/NEWS b/NEWS
index be9cf23237f0e6a8fdbcf12bc043bb9341ca8e56..51ed4f30ee92e9b0460ca24b466494b6be3ce85f 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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 (file)
index 0000000..1ea305c
--- /dev/null
@@ -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===
index 2c7ca8d4140ae240a58c903dc870935bc3b0d9b6..53f0769a1c7d5741c9f4fd92cf1acc02b616ea66 100644 (file)
@@ -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