[Lldb-commits] [PATCH] D76736: [LLDB] Fix parsing of IPv6 host:port inside brackets
This revision was automatically updated to reflect the committed changes. Closed by commit rG57be22fa1797: [LLDB] Fix parsing of IPv6 host:port inside brackets (authored by emrekultursay, committed by labath). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76736/new/ https://reviews.llvm.org/D76736 Files: lldb/source/Utility/UriParser.cpp lldb/unittests/Utility/UriParserTest.cpp Index: lldb/unittests/Utility/UriParserTest.cpp === --- lldb/unittests/Utility/UriParserTest.cpp +++ lldb/unittests/Utility/UriParserTest.cpp @@ -74,12 +74,19 @@ VALIDATE } -TEST(UriParserTest, TypicalPortPath) { +TEST(UriParserTest, TypicalPortPathIPv4) { const UriTestCase testCase("connect://192.168.100.132:5432/", "connect", "192.168.100.132", 5432, "/"); VALIDATE; } +TEST(UriParserTest, TypicalPortPathIPv6) { + const UriTestCase testCase( + "connect://[2601:600:107f:db64:a42b:4faa:284:3082]:5432/", "connect", + "2601:600:107f:db64:a42b:4faa:284:3082", 5432, "/"); + VALIDATE; +} + TEST(UriParserTest, BracketedHostnamePort) { const UriTestCase testCase("connect://[192.168.100.132]:5432/", "connect", "192.168.100.132", 5432, "/"); @@ -102,6 +109,21 @@ VALIDATE } +TEST(UriParserTest, BracketedHostnameWithPortIPv4) { + // Android device over IPv4: port is a part of the hostname. + const UriTestCase testCase("connect://[192.168.100.132:1234]", "connect", + "192.168.100.132:1234", -1, "/"); + VALIDATE +} + +TEST(UriParserTest, BracketedHostnameWithPortIPv6) { + // Android device over IPv6: port is a part of the hostname. + const UriTestCase testCase( + "connect://[[2601:600:107f:db64:a42b:4faa:284]:1234]", "connect", + "[2601:600:107f:db64:a42b:4faa:284]:1234", -1, "/"); + VALIDATE +} + TEST(UriParserTest, BracketedHostnameWithColon) { const UriTestCase testCase("connect://[192.168.100.132:]:1234", "connect", "192.168.100.132:", 1234, "/"); Index: lldb/source/Utility/UriParser.cpp === --- lldb/source/Utility/UriParser.cpp +++ lldb/source/Utility/UriParser.cpp @@ -42,7 +42,7 @@ // Extract hostname if (!host_port.empty() && host_port[0] == '[') { // hostname is enclosed with square brackets. -pos = host_port.find(']'); +pos = host_port.rfind(']'); if (pos == std::string::npos) return false; Index: lldb/unittests/Utility/UriParserTest.cpp === --- lldb/unittests/Utility/UriParserTest.cpp +++ lldb/unittests/Utility/UriParserTest.cpp @@ -74,12 +74,19 @@ VALIDATE } -TEST(UriParserTest, TypicalPortPath) { +TEST(UriParserTest, TypicalPortPathIPv4) { const UriTestCase testCase("connect://192.168.100.132:5432/", "connect", "192.168.100.132", 5432, "/"); VALIDATE; } +TEST(UriParserTest, TypicalPortPathIPv6) { + const UriTestCase testCase( + "connect://[2601:600:107f:db64:a42b:4faa:284:3082]:5432/", "connect", + "2601:600:107f:db64:a42b:4faa:284:3082", 5432, "/"); + VALIDATE; +} + TEST(UriParserTest, BracketedHostnamePort) { const UriTestCase testCase("connect://[192.168.100.132]:5432/", "connect", "192.168.100.132", 5432, "/"); @@ -102,6 +109,21 @@ VALIDATE } +TEST(UriParserTest, BracketedHostnameWithPortIPv4) { + // Android device over IPv4: port is a part of the hostname. + const UriTestCase testCase("connect://[192.168.100.132:1234]", "connect", + "192.168.100.132:1234", -1, "/"); + VALIDATE +} + +TEST(UriParserTest, BracketedHostnameWithPortIPv6) { + // Android device over IPv6: port is a part of the hostname. + const UriTestCase testCase( + "connect://[[2601:600:107f:db64:a42b:4faa:284]:1234]", "connect", + "[2601:600:107f:db64:a42b:4faa:284]:1234", -1, "/"); + VALIDATE +} + TEST(UriParserTest, BracketedHostnameWithColon) { const UriTestCase testCase("connect://[192.168.100.132:]:1234", "connect", "192.168.100.132:", 1234, "/"); Index: lldb/source/Utility/UriParser.cpp === --- lldb/source/Utility/UriParser.cpp +++ lldb/source/Utility/UriParser.cpp @@ -42,7 +42,7 @@ // Extract hostname if (!host_port.empty() && host_port[0] == '[') { // hostname is enclosed with square brackets. -pos = host_port.find(']'); +pos = host_port.rfind(']'); if (pos == std::string::npos) return false; ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D76736: [LLDB] Fix parsing of IPv6 host:port inside brackets
emrekultursay updated this revision to Diff 252622. emrekultursay added a comment. - Added comments to Android-specific test cases, as suggested by labath@. - Reformatted lines that exceeded 80 chars. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76736/new/ https://reviews.llvm.org/D76736 Files: lldb/source/Utility/UriParser.cpp lldb/unittests/Utility/UriParserTest.cpp Index: lldb/unittests/Utility/UriParserTest.cpp === --- lldb/unittests/Utility/UriParserTest.cpp +++ lldb/unittests/Utility/UriParserTest.cpp @@ -74,12 +74,19 @@ VALIDATE } -TEST(UriParserTest, TypicalPortPath) { +TEST(UriParserTest, TypicalPortPathIPv4) { const UriTestCase testCase("connect://192.168.100.132:5432/", "connect", "192.168.100.132", 5432, "/"); VALIDATE; } +TEST(UriParserTest, TypicalPortPathIPv6) { + const UriTestCase testCase( + "connect://[2601:600:107f:db64:a42b:4faa:284:3082]:5432/", "connect", + "2601:600:107f:db64:a42b:4faa:284:3082", 5432, "/"); + VALIDATE; +} + TEST(UriParserTest, BracketedHostnamePort) { const UriTestCase testCase("connect://[192.168.100.132]:5432/", "connect", "192.168.100.132", 5432, "/"); @@ -102,6 +109,21 @@ VALIDATE } +TEST(UriParserTest, BracketedHostnameWithPortIPv4) { + // Android device over IPv4: port is a part of the hostname. + const UriTestCase testCase("connect://[192.168.100.132:1234]", "connect", + "192.168.100.132:1234", -1, "/"); + VALIDATE +} + +TEST(UriParserTest, BracketedHostnameWithPortIPv6) { + // Android device over IPv6: port is a part of the hostname. + const UriTestCase testCase( + "connect://[[2601:600:107f:db64:a42b:4faa:284]:1234]", "connect", + "[2601:600:107f:db64:a42b:4faa:284]:1234", -1, "/"); + VALIDATE +} + TEST(UriParserTest, BracketedHostnameWithColon) { const UriTestCase testCase("connect://[192.168.100.132:]:1234", "connect", "192.168.100.132:", 1234, "/"); Index: lldb/source/Utility/UriParser.cpp === --- lldb/source/Utility/UriParser.cpp +++ lldb/source/Utility/UriParser.cpp @@ -42,7 +42,7 @@ // Extract hostname if (!host_port.empty() && host_port[0] == '[') { // hostname is enclosed with square brackets. -pos = host_port.find(']'); +pos = host_port.rfind(']'); if (pos == std::string::npos) return false; Index: lldb/unittests/Utility/UriParserTest.cpp === --- lldb/unittests/Utility/UriParserTest.cpp +++ lldb/unittests/Utility/UriParserTest.cpp @@ -74,12 +74,19 @@ VALIDATE } -TEST(UriParserTest, TypicalPortPath) { +TEST(UriParserTest, TypicalPortPathIPv4) { const UriTestCase testCase("connect://192.168.100.132:5432/", "connect", "192.168.100.132", 5432, "/"); VALIDATE; } +TEST(UriParserTest, TypicalPortPathIPv6) { + const UriTestCase testCase( + "connect://[2601:600:107f:db64:a42b:4faa:284:3082]:5432/", "connect", + "2601:600:107f:db64:a42b:4faa:284:3082", 5432, "/"); + VALIDATE; +} + TEST(UriParserTest, BracketedHostnamePort) { const UriTestCase testCase("connect://[192.168.100.132]:5432/", "connect", "192.168.100.132", 5432, "/"); @@ -102,6 +109,21 @@ VALIDATE } +TEST(UriParserTest, BracketedHostnameWithPortIPv4) { + // Android device over IPv4: port is a part of the hostname. + const UriTestCase testCase("connect://[192.168.100.132:1234]", "connect", + "192.168.100.132:1234", -1, "/"); + VALIDATE +} + +TEST(UriParserTest, BracketedHostnameWithPortIPv6) { + // Android device over IPv6: port is a part of the hostname. + const UriTestCase testCase( + "connect://[[2601:600:107f:db64:a42b:4faa:284]:1234]", "connect", + "[2601:600:107f:db64:a42b:4faa:284]:1234", -1, "/"); + VALIDATE +} + TEST(UriParserTest, BracketedHostnameWithColon) { const UriTestCase testCase("connect://[192.168.100.132:]:1234", "connect", "192.168.100.132:", 1234, "/"); Index: lldb/source/Utility/UriParser.cpp === --- lldb/source/Utility/UriParser.cpp +++ lldb/source/Utility/UriParser.cpp @@ -42,7 +42,7 @@ // Extract hostname if (!host_port.empty() && host_port[0] == '[') { // hostname is enclosed with square brackets. -pos = host_port.find(']'); +pos = host_port.rfind(']'); if (pos == std::string::npos) return false; ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D76736: [LLDB] Fix parsing of IPv6 host:port inside brackets
emrekultursay added a comment. I don't have commit access. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76736/new/ https://reviews.llvm.org/D76736 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D76736: [LLDB] Fix parsing of IPv6 host:port inside brackets
labath accepted this revision. labath added a comment. This revision is now accepted and ready to land. Looks good. You already mention that in the commit message, but it may be nice to also mention somewhere near the test case that these kinds of "URL"s can occur when and connecting to and android device over IP (in which case the port is part of the "hostname"). So one isn't left wondering why are we testing such "nonsensical" hostnames... Also, do you have commit access? CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76736/new/ https://reviews.llvm.org/D76736 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D76736: [LLDB] Fix parsing of IPv6 host:port inside brackets
kwk added a comment. LGTM but I haven't tested it. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76736/new/ https://reviews.llvm.org/D76736 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D76736: [LLDB] Fix parsing of IPv6 host:port inside brackets
emrekultursay updated this revision to Diff 252499. emrekultursay edited the summary of this revision. emrekultursay added a comment. Added unit tests. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76736/new/ https://reviews.llvm.org/D76736 Files: lldb/source/Utility/UriParser.cpp lldb/unittests/Utility/UriParserTest.cpp Index: lldb/unittests/Utility/UriParserTest.cpp === --- lldb/unittests/Utility/UriParserTest.cpp +++ lldb/unittests/Utility/UriParserTest.cpp @@ -74,12 +74,18 @@ VALIDATE } -TEST(UriParserTest, TypicalPortPath) { +TEST(UriParserTest, TypicalPortPathIPv4) { const UriTestCase testCase("connect://192.168.100.132:5432/", "connect", "192.168.100.132", 5432, "/"); VALIDATE; } +TEST(UriParserTest, TypicalPortPathIPv6) { + const UriTestCase testCase("connect://[2601:600:107f:db64:a42b:4faa:284:3082]:5432/", "connect", + "2601:600:107f:db64:a42b:4faa:284:3082", 5432, "/"); + VALIDATE; +} + TEST(UriParserTest, BracketedHostnamePort) { const UriTestCase testCase("connect://[192.168.100.132]:5432/", "connect", "192.168.100.132", 5432, "/"); @@ -102,6 +108,18 @@ VALIDATE } +TEST(UriParserTest, BracketedHostnameWithPortIPv4) { + const UriTestCase testCase("connect://[192.168.100.132:1234]", "connect", + "192.168.100.132:1234", -1, "/"); + VALIDATE +} + +TEST(UriParserTest, BracketedHostnameWithPortIPv6) { + const UriTestCase testCase("connect://[[2601:600:107f:db64:a42b:4faa:284]:1234]", "connect", + "[2601:600:107f:db64:a42b:4faa:284]:1234", -1, "/"); + VALIDATE +} + TEST(UriParserTest, BracketedHostnameWithColon) { const UriTestCase testCase("connect://[192.168.100.132:]:1234", "connect", "192.168.100.132:", 1234, "/"); Index: lldb/source/Utility/UriParser.cpp === --- lldb/source/Utility/UriParser.cpp +++ lldb/source/Utility/UriParser.cpp @@ -42,7 +42,7 @@ // Extract hostname if (!host_port.empty() && host_port[0] == '[') { // hostname is enclosed with square brackets. -pos = host_port.find(']'); +pos = host_port.rfind(']'); if (pos == std::string::npos) return false; Index: lldb/unittests/Utility/UriParserTest.cpp === --- lldb/unittests/Utility/UriParserTest.cpp +++ lldb/unittests/Utility/UriParserTest.cpp @@ -74,12 +74,18 @@ VALIDATE } -TEST(UriParserTest, TypicalPortPath) { +TEST(UriParserTest, TypicalPortPathIPv4) { const UriTestCase testCase("connect://192.168.100.132:5432/", "connect", "192.168.100.132", 5432, "/"); VALIDATE; } +TEST(UriParserTest, TypicalPortPathIPv6) { + const UriTestCase testCase("connect://[2601:600:107f:db64:a42b:4faa:284:3082]:5432/", "connect", + "2601:600:107f:db64:a42b:4faa:284:3082", 5432, "/"); + VALIDATE; +} + TEST(UriParserTest, BracketedHostnamePort) { const UriTestCase testCase("connect://[192.168.100.132]:5432/", "connect", "192.168.100.132", 5432, "/"); @@ -102,6 +108,18 @@ VALIDATE } +TEST(UriParserTest, BracketedHostnameWithPortIPv4) { + const UriTestCase testCase("connect://[192.168.100.132:1234]", "connect", + "192.168.100.132:1234", -1, "/"); + VALIDATE +} + +TEST(UriParserTest, BracketedHostnameWithPortIPv6) { + const UriTestCase testCase("connect://[[2601:600:107f:db64:a42b:4faa:284]:1234]", "connect", + "[2601:600:107f:db64:a42b:4faa:284]:1234", -1, "/"); + VALIDATE +} + TEST(UriParserTest, BracketedHostnameWithColon) { const UriTestCase testCase("connect://[192.168.100.132:]:1234", "connect", "192.168.100.132:", 1234, "/"); Index: lldb/source/Utility/UriParser.cpp === --- lldb/source/Utility/UriParser.cpp +++ lldb/source/Utility/UriParser.cpp @@ -42,7 +42,7 @@ // Extract hostname if (!host_port.empty() && host_port[0] == '[') { // hostname is enclosed with square brackets. -pos = host_port.find(']'); +pos = host_port.rfind(']'); if (pos == std::string::npos) return false; ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D76736: [LLDB] Fix parsing of IPv6 host:port inside brackets
shafik added a reviewer: labath. shafik added a comment. We need tests it looks like `UriParserTest.cpp` is the right place. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76736/new/ https://reviews.llvm.org/D76736 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D76736: [LLDB] Fix parsing of IPv6 host:port inside brackets
emrekultursay created this revision. emrekultursay added a reviewer: LLDB. Herald added a project: LLDB. When using IPv6 host:port pairs, typically the host is put inside brackets, such as [2601:1234:...:0213]:, and the UriParser can handle this format. However, the Android infrastructure in LLDB assumes an additional brackets around the host:port pair, such that the entire host:port string can be treated as the host (which is used as an Android Serial Number), and UriParser cannot handle multiple brackets. Parsing inputs with such extra backets requires searching the closing bracket from the right. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D76736 Files: lldb/source/Utility/UriParser.cpp Index: lldb/source/Utility/UriParser.cpp === --- lldb/source/Utility/UriParser.cpp +++ lldb/source/Utility/UriParser.cpp @@ -42,7 +42,7 @@ // Extract hostname if (!host_port.empty() && host_port[0] == '[') { // hostname is enclosed with square brackets. -pos = host_port.find(']'); +pos = host_port.rfind(']'); if (pos == std::string::npos) return false; Index: lldb/source/Utility/UriParser.cpp === --- lldb/source/Utility/UriParser.cpp +++ lldb/source/Utility/UriParser.cpp @@ -42,7 +42,7 @@ // Extract hostname if (!host_port.empty() && host_port[0] == '[') { // hostname is enclosed with square brackets. -pos = host_port.find(']'); +pos = host_port.rfind(']'); if (pos == std::string::npos) return false; ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits