Skip to content

Commit 4d86000

Browse files
committed
Merge branch 'PHP-7.4' into master
* PHP-7.4: Fix #80067: Omitting the port in bindto setting errors
2 parents f293e6b + e418678 commit 4d86000

File tree

4 files changed

+28
-5
lines changed

4 files changed

+28
-5
lines changed

ext/standard/tests/network/bindto.phpt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ $fp = stream_socket_client(
1313
);
1414
?>
1515
--EXPECTF--
16-
Warning: stream_socket_client(): Unable to connect to tcp://%s:80 (Failed to parse address "invalid") in %s on line %d
16+
Warning: stream_socket_client(): php_network_getaddresses: getaddrinfo failed: %s in %s on line %d
17+
18+
Warning: stream_socket_client(): Unable to connect to tcp://www.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.com:80 (php_network_getaddresses: getaddrinfo failed: %s) in %s on line %d
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
--TEST--
2+
Bug #80067 (Omitting the port in bindto setting errors)
3+
--SKIPIF--
4+
<?php
5+
if (getenv("SKIP_ONLINE_TESTS")) die('skip online test');
6+
?>
7+
--FILE--
8+
<?php
9+
$context = stream_context_create(['socket' => ['bindto' => '0']]);
10+
var_dump(file_get_contents('https://httpbin.org/get', false, $context) !== false);
11+
?>
12+
--EXPECT--
13+
bool(true)

main/network.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,10 @@ PHPAPI int php_network_getaddresses(const char *host, int socktype, struct socka
197197

198198
if ((n = getaddrinfo(host, NULL, &hints, &res))) {
199199
if (error_string) {
200+
/* free error string received during previous iteration (if any) */
201+
if (*error_string) {
202+
zend_string_release_ex(*error_string, 0);
203+
}
200204
*error_string = strpprintf(0, "php_network_getaddresses: getaddrinfo failed: %s", PHP_GAI_STRERROR(n));
201205
php_error_docref(NULL, E_WARNING, "%s", ZSTR_VAL(*error_string));
202206
} else {
@@ -205,6 +209,10 @@ PHPAPI int php_network_getaddresses(const char *host, int socktype, struct socka
205209
return 0;
206210
} else if (res == NULL) {
207211
if (error_string) {
212+
/* free error string received during previous iteration (if any) */
213+
if (*error_string) {
214+
zend_string_release_ex(*error_string, 0);
215+
}
208216
*error_string = strpprintf(0, "php_network_getaddresses: getaddrinfo failed (null result pointer) errno=%d", errno);
209217
php_error_docref(NULL, E_WARNING, "%s", ZSTR_VAL(*error_string));
210218
} else {
@@ -238,6 +246,10 @@ PHPAPI int php_network_getaddresses(const char *host, int socktype, struct socka
238246
}
239247
if (host_info == NULL) {
240248
if (error_string) {
249+
/* free error string received during previous iteration (if any) */
250+
if (*error_string) {
251+
zend_string_release_ex(*error_string, 0);
252+
}
241253
*error_string = strpprintf(0, "php_network_getaddresses: gethostbyname failed. errno=%d", errno);
242254
php_error_docref(NULL, E_WARNING, "%s", ZSTR_VAL(*error_string));
243255
} else {

main/streams/xp_socket.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -747,10 +747,6 @@ static inline int php_tcp_sockop_connect(php_stream *stream, php_netstream_data_
747747
return -1;
748748
}
749749
bindto = parse_ip_address_ex(Z_STRVAL_P(tmpzval), Z_STRLEN_P(tmpzval), &bindport, xparam->want_errortext, &xparam->outputs.error_text);
750-
if (bindto == NULL) {
751-
efree(host);
752-
return -1;
753-
}
754750
}
755751

756752
#ifdef SO_BROADCAST

0 commit comments

Comments
 (0)