diff options
author | Sara Golemon <pollita@php.net> | 2017-05-28 08:51:41 -0700 |
---|---|---|
committer | Sara Golemon <pollita@php.net> | 2017-05-28 08:51:41 -0700 |
commit | e60cedfbc30c295dac16be1fe357f5ce29ff8605 (patch) | |
tree | 0b6c4aff7743ac6a7e260a0499d299cb7a827097 | |
parent | 818272ae10d00c6ac63116e5b3d71f6d3578fb2b (diff) | |
parent | e628ee9e9db1e7fc471159ab2479a8bfd85e122d (diff) | |
download | php-git-e60cedfbc30c295dac16be1fe357f5ce29ff8605.tar.gz |
Merge branch 'PHP-7.1'
* PHP-7.1:
Bugfix #74556 stream_socket_get_name() returns empty string
Fix abstract name handling to be binary safe
-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); |