Skip to content

Commit

Permalink
Merge branch 'PHP-7.4' into master
Browse files Browse the repository at this point in the history
* PHP-7.4:
  Fix #80067: Omitting the port in bindto setting errors
  • Loading branch information
cmb69 committed Sep 11, 2020
2 parents f293e6b + e418678 commit 4d86000
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 5 deletions.
4 changes: 3 additions & 1 deletion ext/standard/tests/network/bindto.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ $fp = stream_socket_client(
);
?>
--EXPECTF--
Warning: stream_socket_client(): Unable to connect to tcp://%s:80 (Failed to parse address "invalid") in %s on line %d
Warning: stream_socket_client(): php_network_getaddresses: getaddrinfo failed: %s in %s on line %d

Warning: stream_socket_client(): Unable to connect to tcp://www.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.com:80 (php_network_getaddresses: getaddrinfo failed: %s) in %s on line %d
13 changes: 13 additions & 0 deletions ext/standard/tests/network/bug80067.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
--TEST--
Bug #80067 (Omitting the port in bindto setting errors)
--SKIPIF--
<?php
if (getenv("SKIP_ONLINE_TESTS")) die('skip online test');
?>
--FILE--
<?php
$context = stream_context_create(['socket' => ['bindto' => '0']]);
var_dump(file_get_contents('https://httpbin.org/get', false, $context) !== false);
?>
--EXPECT--
bool(true)
12 changes: 12 additions & 0 deletions main/network.c
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,10 @@ PHPAPI int php_network_getaddresses(const char *host, int socktype, struct socka

if ((n = getaddrinfo(host, NULL, &hints, &res))) {
if (error_string) {
/* free error string received during previous iteration (if any) */
if (*error_string) {
zend_string_release_ex(*error_string, 0);
}
*error_string = strpprintf(0, "php_network_getaddresses: getaddrinfo failed: %s", PHP_GAI_STRERROR(n));
php_error_docref(NULL, E_WARNING, "%s", ZSTR_VAL(*error_string));
} else {
Expand All @@ -205,6 +209,10 @@ PHPAPI int php_network_getaddresses(const char *host, int socktype, struct socka
return 0;
} else if (res == NULL) {
if (error_string) {
/* free error string received during previous iteration (if any) */
if (*error_string) {
zend_string_release_ex(*error_string, 0);
}
*error_string = strpprintf(0, "php_network_getaddresses: getaddrinfo failed (null result pointer) errno=%d", errno);
php_error_docref(NULL, E_WARNING, "%s", ZSTR_VAL(*error_string));
} else {
Expand Down Expand Up @@ -238,6 +246,10 @@ PHPAPI int php_network_getaddresses(const char *host, int socktype, struct socka
}
if (host_info == NULL) {
if (error_string) {
/* free error string received during previous iteration (if any) */
if (*error_string) {
zend_string_release_ex(*error_string, 0);
}
*error_string = strpprintf(0, "php_network_getaddresses: gethostbyname failed. errno=%d", errno);
php_error_docref(NULL, E_WARNING, "%s", ZSTR_VAL(*error_string));
} else {
Expand Down
4 changes: 0 additions & 4 deletions main/streams/xp_socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -747,10 +747,6 @@ static inline int php_tcp_sockop_connect(php_stream *stream, php_netstream_data_
return -1;
}
bindto = parse_ip_address_ex(Z_STRVAL_P(tmpzval), Z_STRLEN_P(tmpzval), &bindport, xparam->want_errortext, &xparam->outputs.error_text);
if (bindto == NULL) {
efree(host);
return -1;
}
}

#ifdef SO_BROADCAST
Expand Down

0 comments on commit 4d86000

Please sign in to comment.