Skip to content

Commit e418678

Browse files
committed
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Fix #80067: Omitting the port in bindto setting errors
2 parents 1d8ddf6 + dfb3a79 commit e418678

File tree

5 files changed

+29
-5
lines changed

5 files changed

+29
-5
lines changed

NEWS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ PHP NEWS
3535
. Fixed bug #80077 (getmxrr test bug). (Rainer Jung)
3636
. Fixed bug #72941 (Modifying bucket->data by-ref has no effect any longer).
3737
(cmb)
38+
. Fixed bug #80067 (Omitting the port in bindto setting errors). (cmb)
3839

3940
03 Sep 2020, PHP 7.4.10
4041

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
@@ -201,6 +201,10 @@ PHPAPI int php_network_getaddresses(const char *host, int socktype, struct socka
201201

202202
if ((n = getaddrinfo(host, NULL, &hints, &res))) {
203203
if (error_string) {
204+
/* free error string received during previous iteration (if any) */
205+
if (*error_string) {
206+
zend_string_release_ex(*error_string, 0);
207+
}
204208
*error_string = strpprintf(0, "php_network_getaddresses: getaddrinfo failed: %s", PHP_GAI_STRERROR(n));
205209
php_error_docref(NULL, E_WARNING, "%s", ZSTR_VAL(*error_string));
206210
} else {
@@ -209,6 +213,10 @@ PHPAPI int php_network_getaddresses(const char *host, int socktype, struct socka
209213
return 0;
210214
} else if (res == NULL) {
211215
if (error_string) {
216+
/* free error string received during previous iteration (if any) */
217+
if (*error_string) {
218+
zend_string_release_ex(*error_string, 0);
219+
}
212220
*error_string = strpprintf(0, "php_network_getaddresses: getaddrinfo failed (null result pointer) errno=%d", errno);
213221
php_error_docref(NULL, E_WARNING, "%s", ZSTR_VAL(*error_string));
214222
} else {
@@ -242,6 +250,10 @@ PHPAPI int php_network_getaddresses(const char *host, int socktype, struct socka
242250
}
243251
if (host_info == NULL) {
244252
if (error_string) {
253+
/* free error string received during previous iteration (if any) */
254+
if (*error_string) {
255+
zend_string_release_ex(*error_string, 0);
256+
}
245257
*error_string = strpprintf(0, "php_network_getaddresses: gethostbyname failed. errno=%d", errno);
246258
php_error_docref(NULL, E_WARNING, "%s", ZSTR_VAL(*error_string));
247259
} else {

main/streams/xp_socket.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -750,10 +750,6 @@ static inline int php_tcp_sockop_connect(php_stream *stream, php_netstream_data_
750750
return -1;
751751
}
752752
bindto = parse_ip_address_ex(Z_STRVAL_P(tmpzval), Z_STRLEN_P(tmpzval), &bindport, xparam->want_errortext, &xparam->outputs.error_text);
753-
if (bindto == NULL) {
754-
efree(host);
755-
return -1;
756-
}
757753
}
758754

759755
#ifdef SO_BROADCAST

0 commit comments

Comments
 (0)