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