diff --git a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/docker/configuration/DockerConfigurationMetadata.java b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/docker/configuration/DockerConfigurationMetadata.java index 891cbf5fbaaa..97d57725dc74 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/docker/configuration/DockerConfigurationMetadata.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/docker/configuration/DockerConfigurationMetadata.java @@ -219,11 +219,11 @@ static final class Auth extends MappedObject { Auth(JsonNode node) { super(node, MethodHandles.lookup()); String auth = valueAt("/auth", String.class); - if (StringUtils.hasText(auth)) { + if (StringUtils.hasLength(auth)) { String[] parts = new String(Base64.getDecoder().decode(auth)).split(":", 2); Assert.state(parts.length == 2, "Malformed auth in docker configuration metadata"); this.username = parts[0]; - this.password = parts[1]; + this.password = trim(parts[1], Character.MIN_VALUE); } else { this.username = valueAt("/username", String.class); @@ -244,6 +244,11 @@ String getEmail() { return this.email; } + private static String trim(String source, char character) { + source = StringUtils.trimLeadingCharacter(source, character); + return StringUtils.trimTrailingCharacter(source, character); + } + } static final class DockerContext extends MappedObject { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/docker/configuration/DockerConfigurationMetadataTests.java b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/docker/configuration/DockerConfigurationMetadataTests.java index 4e90ab85309c..27dd853f665e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/docker/configuration/DockerConfigurationMetadataTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/docker/configuration/DockerConfigurationMetadataTests.java @@ -125,7 +125,7 @@ void configWithAuthIsRead() throws Exception { .containsEntry("gcr.io", "gcr"); assertThat(configuration.getAuths()).hasSize(3).hasEntrySatisfying("https://index.docker.io/v1/", (auth) -> { assertThat(auth.getUsername()).isEqualTo("username"); - assertThat(auth.getPassword()).isEqualTo("password"); + assertThat(auth.getPassword()).isEqualTo("pass\u0000word"); assertThat(auth.getEmail()).isEqualTo("test@gmail.com"); }).hasEntrySatisfying("custom-registry.example.com", (auth) -> { assertThat(auth.getUsername()).isEqualTo("customUser"); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/resources/org/springframework/boot/buildpack/platform/docker/configuration/with-auth/config.json b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/resources/org/springframework/boot/buildpack/platform/docker/configuration/with-auth/config.json index 5ccd4b0bf21f..71980fd807d3 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/resources/org/springframework/boot/buildpack/platform/docker/configuration/with-auth/config.json +++ b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/resources/org/springframework/boot/buildpack/platform/docker/configuration/with-auth/config.json @@ -1,7 +1,7 @@ { "auths": { "https://index.docker.io/v1/": { - "auth": "dXNlcm5hbWU6cGFzc3dvcmQ=", + "auth": "dXNlcm5hbWU6AABwYXNzAHdvcmQAAA==", "email": "test@gmail.com" }, "custom-registry.example.com": {