Fix peon errors when executing tasks in ipv6(#13972) (#13995)

This commit is contained in:
soullkk 2023-03-31 11:48:10 +08:00 committed by GitHub
parent 1eeecf5fb2
commit 51f3db2ce6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 2 deletions

View File

@ -475,6 +475,18 @@ public class ServiceClientImpl implements ServiceClient
); );
} }
/**
* Sanitizes IPv6 address if it has brackets. Eg. host = "[1:2:3:4:5:6:7:8]" will be returned as "1:2:3:4:5:6:7:8"
* after this function
*/
static String sanitizeHost(String host)
{
if (host.charAt(0) == '[') {
return host.substring(1, host.length() - 1);
}
return host;
}
/** /**
* Returns a {@link ServiceLocation} without a path component, based on a URI. * Returns a {@link ServiceLocation} without a path component, based on a URI.
*/ */
@ -488,13 +500,13 @@ public class ServiceClientImpl implements ServiceClient
try { try {
final URI uri = new URI(uriString); final URI uri = new URI(uriString);
final String host = uri.getHost();
if (host == null) { if (uri.getHost() == null) {
return null; return null;
} }
final String scheme = uri.getScheme(); final String scheme = uri.getScheme();
final String host = sanitizeHost(uri.getHost());
if ("http".equals(scheme)) { if ("http".equals(scheme)) {
return new ServiceLocation(host, uri.getPort() < 0 ? 80 : uri.getPort(), -1, ""); return new ServiceLocation(host, uri.getPort() < 0 ? 80 : uri.getPort(), -1, "");

View File

@ -663,6 +663,34 @@ public class ServiceClientImplTest
new ServiceLocation("1.2.3.4", -1, 443, ""), new ServiceLocation("1.2.3.4", -1, 443, ""),
ServiceClientImpl.serviceLocationNoPathFromUri("https://1.2.3.4/foo") ServiceClientImpl.serviceLocationNoPathFromUri("https://1.2.3.4/foo")
); );
Assert.assertEquals(
new ServiceLocation("1:2:3:4:5:6:7:8", 9999, -1, ""),
ServiceClientImpl.serviceLocationNoPathFromUri("http://[1:2:3:4:5:6:7:8]:9999/foo")
);
Assert.assertEquals(
new ServiceLocation("1:2:3:4:5:6:7:8", 80, -1, ""),
ServiceClientImpl.serviceLocationNoPathFromUri("http://[1:2:3:4:5:6:7:8]/foo")
);
Assert.assertEquals(
new ServiceLocation("1:2:3:4:5:6:7:8", -1, 9999, ""),
ServiceClientImpl.serviceLocationNoPathFromUri("https://[1:2:3:4:5:6:7:8]:9999/foo")
);
Assert.assertEquals(
new ServiceLocation("1:2:3:4:5:6:7:8", -1, 443, ""),
ServiceClientImpl.serviceLocationNoPathFromUri("https://[1:2:3:4:5:6:7:8]/foo")
);
}
@Test
public void test_normalizeHost()
{
Assert.assertEquals("1:2:3:4:5:6:7:8", ServiceClientImpl.sanitizeHost("[1:2:3:4:5:6:7:8]"));
Assert.assertEquals("1:2:3:4:5:6:7:8", ServiceClientImpl.sanitizeHost("1:2:3:4:5:6:7:8"));
Assert.assertEquals("1.2.3.4", ServiceClientImpl.sanitizeHost("1.2.3.4"));
} }
@Test @Test