summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSara Golemon <pollita@php.net>2017-05-28 07:23:57 -0700
committerSara Golemon <pollita@php.net>2017-05-28 08:48:18 -0700
commit8dcfec9789b4792f7b6b25673274b74bae71b512 (patch)
tree25de45e564ee561de0b87cbfbe8d8e895e390e6f
parent6d2d0bbda7a406000ccb8a2dff86ddfe1ce467d5 (diff)
downloadphp-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--NEWS4
-rw-r--r--ext/standard/streamsfuncs.c5
-rw-r--r--ext/standard/tests/streams/bug74556.phpt22
3 files changed, 31 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index c51b14ec6a..3c768adad1 100644
--- a/NEWS
+++ b/NEWS
@@ -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)