From 6fef30ddc1ea373b03eb43126b07548e7595a3f3 Mon Sep 17 00:00:00 2001 From: Danny Date: Sun, 3 Dec 2017 22:01:17 +0800 Subject: [PATCH 1/3] Fix Base64 Error: ArrayIndexOutOfBoundsException --- .../com/spotify/docker/client/DefaultDockerClient.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/spotify/docker/client/DefaultDockerClient.java b/src/main/java/com/spotify/docker/client/DefaultDockerClient.java index 4b8fc2f35..0734480ea 100644 --- a/src/main/java/com/spotify/docker/client/DefaultDockerClient.java +++ b/src/main/java/com/spotify/docker/client/DefaultDockerClient.java @@ -165,6 +165,8 @@ import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; + +import org.apache.commons.codec.binary.Base64; import org.apache.commons.compress.utils.IOUtils; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; @@ -183,7 +185,6 @@ import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.client.ClientProperties; import org.glassfish.jersey.client.RequestEntityProcessing; -import org.glassfish.jersey.internal.util.Base64; import org.glassfish.jersey.jackson.JacksonFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -2722,9 +2723,9 @@ private String authHeader(final RegistryAuth registryAuth) throws DockerExceptio return "null"; } try { - return Base64.encodeAsString(ObjectMapperProvider + return Base64.encodeBase64String(ObjectMapperProvider .objectMapper() - .writeValueAsString(registryAuth)); + .writeValueAsString(registryAuth).getBytes()); } catch (JsonProcessingException ex) { throw new DockerException("Could not encode X-Registry-Auth header", ex); } @@ -2750,7 +2751,7 @@ private String authRegistryHeader(final RegistryConfigs registryConfigs) authRegistryJson = "{\"auths\":" + authRegistryJson + "}"; } - return Base64.encodeAsString(authRegistryJson); + return Base64.encodeBase64String(authRegistryJson.getBytes()); } catch (JsonProcessingException | InterruptedException ex) { throw new DockerException("Could not encode X-Registry-Config header", ex); } From 9b961a8c6608c0559135f26915190c8762d8e571 Mon Sep 17 00:00:00 2001 From: Danny Date: Tue, 12 Dec 2017 13:13:35 +0800 Subject: [PATCH 2/3] Fix Findbug warnings by using getBytes("UTF-8") and ObjectMapper.writeValueAsBytes(). --- .../java/com/spotify/docker/client/DefaultDockerClient.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/spotify/docker/client/DefaultDockerClient.java b/src/main/java/com/spotify/docker/client/DefaultDockerClient.java index 0734480ea..c20458fd5 100644 --- a/src/main/java/com/spotify/docker/client/DefaultDockerClient.java +++ b/src/main/java/com/spotify/docker/client/DefaultDockerClient.java @@ -2725,7 +2725,7 @@ private String authHeader(final RegistryAuth registryAuth) throws DockerExceptio try { return Base64.encodeBase64String(ObjectMapperProvider .objectMapper() - .writeValueAsString(registryAuth).getBytes()); + .writeValueAsBytes(registryAuth)); } catch (JsonProcessingException ex) { throw new DockerException("Could not encode X-Registry-Auth header", ex); } @@ -2751,8 +2751,8 @@ private String authRegistryHeader(final RegistryConfigs registryConfigs) authRegistryJson = "{\"auths\":" + authRegistryJson + "}"; } - return Base64.encodeBase64String(authRegistryJson.getBytes()); - } catch (JsonProcessingException | InterruptedException ex) { + return Base64.encodeBase64String(authRegistryJson.getBytes("UTF-8")); + } catch (JsonProcessingException | InterruptedException | UnsupportedEncodingException ex) { throw new DockerException("Could not encode X-Registry-Config header", ex); } } From 4f5b8c14317bd079800526fa30653f34325c1154 Mon Sep 17 00:00:00 2001 From: Danny Date: Tue, 12 Dec 2017 13:59:58 +0800 Subject: [PATCH 3/3] Use StandardCharsets.UTF_8 instead of hard-coding "UTF-8". --- .../java/com/spotify/docker/client/DefaultDockerClient.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/spotify/docker/client/DefaultDockerClient.java b/src/main/java/com/spotify/docker/client/DefaultDockerClient.java index f75b5b418..d1c1e1f55 100644 --- a/src/main/java/com/spotify/docker/client/DefaultDockerClient.java +++ b/src/main/java/com/spotify/docker/client/DefaultDockerClient.java @@ -138,6 +138,7 @@ import java.net.SocketTimeoutException; import java.net.URI; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -2751,8 +2752,8 @@ private String authRegistryHeader(final RegistryConfigs registryConfigs) authRegistryJson = "{\"auths\":" + authRegistryJson + "}"; } - return Base64.encodeBase64String(authRegistryJson.getBytes("UTF-8")); - } catch (JsonProcessingException | InterruptedException | UnsupportedEncodingException ex) { + return Base64.encodeBase64String(authRegistryJson.getBytes(StandardCharsets.UTF_8)); + } catch (JsonProcessingException | InterruptedException ex) { throw new DockerException("Could not encode X-Registry-Config header", ex); } }