diff options
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/standard/streamsfuncs.c | 5 | ||||
-rw-r--r-- | ext/standard/tests/streams/bug74556.phpt | 22 | ||||
-rw-r--r-- | main/network.c | 2 |
4 files changed, 30 insertions, 1 deletions
@@ -52,6 +52,7 @@ PHP NEWS a fatal error). (pmmaga) . Fixed bug #63384 (Cannot override an abstract method with an abstract method). (pmmaga, wes) + . Fixed misparsing of abstract unix domain socket names. (Sara) - BCMath: . Fixed bug #46564 (bcmod truncates fractionals). (liborm85) @@ -202,6 +203,7 @@ PHP NEWS . Fixed bug #72979 (money_format stores wrong length AIX). (matthieu.sarter) . Fixed bug #74300 (unserialize accepts two plus/minus signs for float number exponent part). (xKerman) + . Fixed bug #74556 (stream_socket_get_name() returns '\0'). (Sara) - XML: . Moved utf8_encode() and utf8_decode() to the Standard extension. (Andrea) diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index e243ce9324..783b354984 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -330,6 +330,11 @@ PHP_FUNCTION(stream_socket_get_name) RETURN_FALSE; } + if (!ZSTR_LEN(name)) { + zend_string_release(name); + RETURN_FALSE; + } + RETVAL_STR(name); } /* }}} */ diff --git a/ext/standard/tests/streams/bug74556.phpt b/ext/standard/tests/streams/bug74556.phpt new file mode 100644 index 0000000000..016a3dce86 --- /dev/null +++ b/ext/standard/tests/streams/bug74556.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #74556 stream_socket_get_name() on unix socket returns "\0" +--SKIPIF-- +<?php +if (!strncasecmp(PHP_OS, 'WIN', 3)) echo "skip Unix Only"; +--FILE-- +<?php + +$sock = __DIR__ . '/bug74556.sock'; +$s = stream_socket_server("unix://$sock"); +$c = stream_socket_client("unix://$sock"); + +var_dump( + stream_socket_get_name($s, true), + stream_socket_get_name($c, false) +); +--CLEAN-- +<?php +unlink(__DIR__ . '/bug74556.sock'); +--EXPECT-- +bool(false) +bool(false) diff --git a/main/network.c b/main/network.c index eee7d28fea..763a84be94 100644 --- a/main/network.c +++ b/main/network.c @@ -649,7 +649,7 @@ PHPAPI void php_network_populate_name_from_sockaddr( if (ua->sun_path[0] == '\0') { /* abstract name */ - int len = strlen(ua->sun_path + 1) + 1; + int len = sl - sizeof(sa_family_t); *textaddr = zend_string_init((char*)ua->sun_path, len, 0); } else { int len = strlen(ua->sun_path); |