diff --git a/src/main/java/com/google/devtools/build/lib/authandtls/credentialhelper/CredentialHelperProvider.java b/src/main/java/com/google/devtools/build/lib/authandtls/credentialhelper/CredentialHelperProvider.java index ded7e5eab3c0d0..e13d1b40385a8b 100644 --- a/src/main/java/com/google/devtools/build/lib/authandtls/credentialhelper/CredentialHelperProvider.java +++ b/src/main/java/com/google/devtools/build/lib/authandtls/credentialhelper/CredentialHelperProvider.java @@ -16,6 +16,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; +import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.vfs.Path; import com.google.errorprone.annotations.Immutable; @@ -66,7 +67,12 @@ private CredentialHelperProvider( public Optional findCredentialHelper(URI uri) { Preconditions.checkNotNull(uri); - String host = Preconditions.checkNotNull(uri.getHost()); + String host = uri.getHost(); + if (Strings.isNullOrEmpty(host)) { + // Some URIs (e.g. unix://) legitimately have no host component. + return Optional.empty(); + } + Optional credentialHelper = findHostCredentialHelper(host) .or(() -> findWildcardCredentialHelper(host)) diff --git a/src/test/java/com/google/devtools/build/lib/authandtls/credentialhelper/CredentialHelperProviderTest.java b/src/test/java/com/google/devtools/build/lib/authandtls/credentialhelper/CredentialHelperProviderTest.java index 25b6c03ff8e6b2..89b6dbc6396b75 100644 --- a/src/test/java/com/google/devtools/build/lib/authandtls/credentialhelper/CredentialHelperProviderTest.java +++ b/src/test/java/com/google/devtools/build/lib/authandtls/credentialhelper/CredentialHelperProviderTest.java @@ -104,6 +104,15 @@ public void invalidPattern() throws Exception { assertInvalidPattern("foo-*.münchen.de"); } + @Test + public void uriWithoutHostComponent() throws Exception { + Path helper = fileSystem.getPath(EXAMPLE_COM_HELPER_PATH); + CredentialHelperProvider provider = + CredentialHelperProvider.builder().add("example.com", helper).build(); + + assertThat(provider.findCredentialHelper(URI.create("unix:///path/to/socket"))).isEmpty(); + } + @Test public void addNonExecutableDefaultHelper() throws Exception { Path helper = fileSystem.getPath("/path/to/non/executable");