diff options
-rw-r--r-- | NEWS | 4 | ||||
-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, 32 insertions, 1 deletions
@@ -5,6 +5,7 @@ PHP NEWS - Core: . Fixed bug #74658 (Undefined constants in array properties result in broken properties). (Laruence) + . Fixed misparsing of abstract unix domain socket names. (Sara) - Opcache: . Fixed bug #74663 (Segfault with opcache.memory_protect and @@ -17,6 +18,9 @@ PHP NEWS - FTP: . Fixed bug #74598 (ftp:// wrapper ignores context arg). (Sara) +- Streams: + . Fixed bug #74556 (stream_socket_get_name() returns '\0'). (Sara) + 8 Jun 2017, PHP 7.1.6 - Core: diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index feb9346885..9c2f8f6d58 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -314,6 +314,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 8ce5fa0648..b983045fae 100644 --- a/main/network.c +++ b/main/network.c @@ -661,7 +661,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); |