diff options
author | Ville Hukkamaki <vhu@iki.fi> | 2018-08-28 23:26:13 +0200 |
---|---|---|
committer | Joe Watkins <krakjoe@php.net> | 2018-09-04 11:12:04 +0200 |
commit | 0f724453c03b7ff500563c019f5dab736d326ad8 (patch) | |
tree | b9cb12d8b0afc1adf802a8a5307f84ed7581488f | |
parent | e58690a26d5e3800c26d24ea30d4e5a1367f096d (diff) | |
download | php-git-0f724453c03b7ff500563c019f5dab736d326ad8.tar.gz |
Fix bug #74764 and add a test case
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/standard/tests/network/bug74764.phpt | 24 | ||||
-rw-r--r-- | main/network.c | 3 |
3 files changed, 29 insertions, 0 deletions
@@ -12,6 +12,8 @@ PHP NEWS - Standard: . Fixed bug #73457 (Wrong error message when fopen FTP wrapped fails to open data connection). (Ville Hukkamäki) + . Fixed bug #74764 (Bindto IPv6 works with file_get_contents but fails with + stream_socket_client). (Ville Hukkamäki) 13 Sep 2018, PHP 7.1.22 diff --git a/ext/standard/tests/network/bug74764.phpt b/ext/standard/tests/network/bug74764.phpt new file mode 100644 index 0000000000..e946167008 --- /dev/null +++ b/ext/standard/tests/network/bug74764.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #74764 IPv6 bindto fails with stream_socket_client() +--SKIPIF-- +<?php +/* following copied straight from the tcp6loop.phpt */ +@stream_socket_client('tcp://[::1]:0', $errno); +if ($errno != 111) die('skip IPv6 not supported.'); +?> +--FILE-- +<?php +$context = stream_context_create( + ['socket' => array('bindto' => "[::]:0")] + ); + $socket = stream_socket_client('tcp://localhost:1443', $errno, $errstr, 5, STREAM_CLIENT_CONNECT, $context); + +$context = stream_context_create( + array('socket' => array('bindto' => "0.0.0.0:0")) + ); + $socket = stream_socket_client('tcp://localhost:1443', $errno, $errstr, 5, STREAM_CLIENT_CONNECT, $context); +?> +--EXPECTF-- +Warning: stream_socket_client(): unable to connect to tcp://localhost:1443 (%s) in %s on line %d + +Warning: stream_socket_client(): unable to connect to tcp://localhost:1443 (%s) in %s on line %d diff --git a/main/network.c b/main/network.c index 8a326369a8..145911db00 100644 --- a/main/network.c +++ b/main/network.c @@ -863,6 +863,9 @@ php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short int local_address_len = 0; if (sa->sa_family == AF_INET) { + if (strchr(bindto,':')) { + goto skip_bind; + } struct sockaddr_in *in4 = emalloc(sizeof(struct sockaddr_in)); local_address = (struct sockaddr*)in4; |