summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSara Golemon <pollita@php.net>2017-05-28 08:51:41 -0700
committerSara Golemon <pollita@php.net>2017-05-28 08:51:41 -0700
commite60cedfbc30c295dac16be1fe357f5ce29ff8605 (patch)
tree0b6c4aff7743ac6a7e260a0499d299cb7a827097
parent818272ae10d00c6ac63116e5b3d71f6d3578fb2b (diff)
parente628ee9e9db1e7fc471159ab2479a8bfd85e122d (diff)
downloadphp-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--NEWS2
-rw-r--r--ext/standard/streamsfuncs.c5
-rw-r--r--ext/standard/tests/streams/bug74556.phpt22
-rw-r--r--main/network.c2
4 files changed, 30 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 18277fb8e3..03176f8df4 100644
--- a/NEWS
+++ b/NEWS
@@ -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);