From 0b8c83f5936581942715d14883cdebddc18bad30 Mon Sep 17 00:00:00 2001 From: twosee Date: Wed, 29 Jul 2020 12:59:44 +0800 Subject: [PATCH] Handle bindto error Closes GH-5903. --- ext/standard/tests/network/bindto.phpt | 16 ++++++++++++++++ main/streams/xp_socket.c | 4 ++++ 2 files changed, 20 insertions(+) create mode 100644 ext/standard/tests/network/bindto.phpt diff --git a/ext/standard/tests/network/bindto.phpt b/ext/standard/tests/network/bindto.phpt new file mode 100644 index 00000000000..bfff64a5e09 --- /dev/null +++ b/ext/standard/tests/network/bindto.phpt @@ -0,0 +1,16 @@ +--TEST-- +Test invalid bindto +--FILE-- + [ + 'bindto' => 'invalid', + ], +]); +$fp = stream_socket_client( + 'tcp://www.' . str_repeat('x', 100) . '.com:80', + $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $ctx +); +?> +--EXPECTF-- +Warning: stream_socket_client(): Unable to connect to tcp://%s:80 (Failed to parse address "invalid") in %s on line %d diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c index 0ae0c0f77bf..4bca670b849 100644 --- a/main/streams/xp_socket.c +++ b/main/streams/xp_socket.c @@ -744,6 +744,10 @@ 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