diff --git a/src/Common/parseAddress.cpp b/src/Common/parseAddress.cpp index 465c424166e..b398f5cff10 100644 --- a/src/Common/parseAddress.cpp +++ b/src/Common/parseAddress.cpp @@ -28,13 +28,17 @@ std::pair parseAddress(const std::string & str, UInt16 defa throw Exception("Illegal address passed to function parseAddress: " "the address begins with opening square bracket, but no closing square bracket found", ErrorCodes::BAD_ARGUMENTS); - port = find_first_symbols<':'>(closing_square_bracket + 1, end); + port = closing_square_bracket + 1; } else port = find_first_symbols<':'>(begin, end); if (port != end) { + if (*port != ':') + throw Exception(ErrorCodes::BAD_ARGUMENTS, + "Illegal port prefix passed to function parseAddress: {}", port); + UInt16 port_number; if (!tryParse(port_number, port + 1)) { diff --git a/tests/queries/0_stateless/01880_remote_ipv6.sql b/tests/queries/0_stateless/01880_remote_ipv6.sql index 11bdf850ec0..9d9c25addbf 100644 --- a/tests/queries/0_stateless/01880_remote_ipv6.sql +++ b/tests/queries/0_stateless/01880_remote_ipv6.sql @@ -6,3 +6,7 @@ SELECT * FROM remote('[::1]:9000', system.one) FORMAT Null; SELECT * FROM remote('[::1', system.one) FORMAT Null; -- { serverError 36 } SELECT * FROM remote('::1]', system.one) FORMAT Null; -- { serverError 519 } SELECT * FROM remote('::1', system.one) FORMAT Null; -- { serverError 519 } + +SELECT * FROM remote('[::1][::1]', system.one) FORMAT Null; -- { serverError 36 } +SELECT * FROM remote('[::1][::1', system.one) FORMAT Null; -- { serverError 36 } +SELECT * FROM remote('[::1]::1]', system.one) FORMAT Null; -- { serverError 519 }