From c19b2851f190d192b97ce1131e2db49636811578 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Tue, 2 Feb 2021 11:13:10 +0100 Subject: [PATCH] Ignore null Locale in MockHttpServletResponse Prior to this commit, calls to setLocale() MockHttpServletResponse would result in a NullPointerException if the supplied Locale was null. Although the Javadoc for setLocale(Locale) and addHeader(String, String) in javax.servlet.ServletResponse does not specify how a null Locale should be handled, both Tomcat and Jetty simply ignore a null value. This commit therefore updates MockHttpServletResponse to silently ignore a null Locale passed to setLocale(). Closes gh-26493 --- .../springframework/mock/web/MockHttpServletResponse.java | 3 +++ .../mock/web/MockHttpServletResponseTests.java | 7 +++++++ .../web/testfixture/servlet/MockHttpServletResponse.java | 3 +++ 3 files changed, 13 insertions(+) diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java index 823945b5974..695c1277dcf 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java @@ -344,6 +344,9 @@ public class MockHttpServletResponse implements HttpServletResponse { @Override public void setLocale(Locale locale) { + if (locale == null) { + return; + } this.locale = locale; doAddHeaderValue(HttpHeaders.CONTENT_LANGUAGE, locale.toLanguageTag(), true); } diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java index 907a5cfac9f..08fda3f7237 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java @@ -85,6 +85,13 @@ class MockHttpServletResponseTests { assertThat(response.containsHeader(headerName)).isFalse(); } + @Test // gh-26493 + void setLocaleWithNullValue() { + assertThat(response.getLocale()).isEqualTo(Locale.getDefault()); + response.setLocale(null); + assertThat(response.getLocale()).isEqualTo(Locale.getDefault()); + } + @Test void setContentType() { String contentType = "test/plain"; diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java index 5af669a25ec..0459dcb7dbf 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java @@ -344,6 +344,9 @@ public class MockHttpServletResponse implements HttpServletResponse { @Override public void setLocale(Locale locale) { + if (locale == null) { + return; + } this.locale = locale; doAddHeaderValue(HttpHeaders.CONTENT_LANGUAGE, locale.toLanguageTag(), true); }