diff options
author | Sara Golemon <pollita@php.net> | 2017-05-28 07:23:57 -0700 |
---|---|---|
committer | Sara Golemon <pollita@php.net> | 2017-05-28 08:48:18 -0700 |
commit | 8dcfec9789b4792f7b6b25673274b74bae71b512 (patch) | |
tree | 25de45e564ee561de0b87cbfbe8d8e895e390e6f | |
parent | 6d2d0bbda7a406000ccb8a2dff86ddfe1ce467d5 (diff) | |
download | php-git-8dcfec9789b4792f7b6b25673274b74bae71b512.tar.gz |
Bugfix #74556 stream_socket_get_name() returns empty string
The original bug report had it returning '\0',
but with a fix to abstract name handling (6d2d0bbda7)
it now actually returns ''.
Neither of these are good, as per unix(7)
an empty socket name indicates an unbound name
and "should not be inspected".
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/standard/streamsfuncs.c | 5 | ||||
-rw-r--r-- | ext/standard/tests/streams/bug74556.phpt | 22 |
3 files changed, 31 insertions, 0 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.0.20 - Core: diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 0237ae8eb7..877247e8eb 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) |