From 4893ea307b0a604faf938718cab1daaccee08914 Mon Sep 17 00:00:00 2001 From: Lai Jiang Date: Wed, 6 Dec 2023 13:30:37 -0500 Subject: [PATCH] Check for null error stream (#2249) --- .../registry/request/UrlConnectionUtils.java | 2 ++ .../request/UrlConnectionUtilsTest.java | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/core/src/main/java/google/registry/request/UrlConnectionUtils.java b/core/src/main/java/google/registry/request/UrlConnectionUtils.java index 403696c15..143fdb235 100644 --- a/core/src/main/java/google/registry/request/UrlConnectionUtils.java +++ b/core/src/main/java/google/registry/request/UrlConnectionUtils.java @@ -50,6 +50,8 @@ public final class UrlConnectionUtils { try (InputStream is = responseCode < 400 ? connection.getInputStream() : connection.getErrorStream()) { return ByteStreams.toByteArray(is); + } catch (NullPointerException e) { + return new byte[] {}; } } diff --git a/core/src/test/java/google/registry/request/UrlConnectionUtilsTest.java b/core/src/test/java/google/registry/request/UrlConnectionUtilsTest.java index 620218a7c..832817b19 100644 --- a/core/src/test/java/google/registry/request/UrlConnectionUtilsTest.java +++ b/core/src/test/java/google/registry/request/UrlConnectionUtilsTest.java @@ -29,6 +29,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Arrays; import java.util.List; @@ -104,4 +105,21 @@ public class UrlConnectionUtilsTest { "Multipart data contains autogenerated boundary: " + "------------------------------AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); } + + @Test + void testErrorStream() throws Exception { + HttpsURLConnection connection = mock(HttpsURLConnection.class); + when(connection.getResponseCode()).thenReturn(400); + when(connection.getErrorStream()) + .thenReturn(new ByteArrayInputStream("Failure".getBytes(UTF_8))); + assertThat(UrlConnectionUtils.getResponseBytes(connection)) + .isEqualTo("Failure".getBytes(UTF_8)); + } + + @Test + void testErrorStream_null() throws Exception { + HttpsURLConnection connection = mock(HttpsURLConnection.class); + when(connection.getResponseCode()).thenReturn(400); + assertThat(UrlConnectionUtils.getResponseBytes(connection)).isEmpty(); + } }