Skip to content

Commit

Permalink
Fix bug #74764 and add a test case
Browse files Browse the repository at this point in the history
  • Loading branch information
Ville Hukkamaki authored and krakjoe committed Sep 4, 2018
1 parent e58690a commit 0f72445
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
2 changes: 2 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
24 changes: 24 additions & 0 deletions ext/standard/tests/network/bug74764.phpt
Original file line number Diff line number Diff line change
@@ -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
3 changes: 3 additions & 0 deletions main/network.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 0f72445

Please sign in to comment.