From 39726740e5c9aa33b6c311e979f52aee967eefcf Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Wed, 30 Sep 2015 18:40:59 +0200 Subject: [PATCH] Guard against invalid response status ServletWebRequest now guard against invalid HTTP response status when processing conditional requests. Issue: SPR-13516 --- .../web/context/request/ServletWebRequest.java | 10 +++++++--- .../request/ServletWebRequestHttpMethodsTests.java | 12 ++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java b/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java index 493a1aabfc..381e72bcc3 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java @@ -244,11 +244,15 @@ public class ServletWebRequest extends ServletRequestAttributes implements Nativ private boolean isCompatibleWithConditionalRequests(HttpServletResponse response) { - if (response == null || !servlet3Present) { - // Can't check response.getStatus() - let's assume we're good + try { + if (response == null || !servlet3Present) { + // Can't check response.getStatus() - let's assume we're good + return true; + } + return HttpStatus.valueOf(response.getStatus()).is2xxSuccessful(); + } catch (IllegalArgumentException e) { return true; } - return HttpStatus.valueOf(response.getStatus()).is2xxSuccessful(); } private boolean isHeaderAbsent(HttpServletResponse response, String header) { diff --git a/spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestHttpMethodsTests.java b/spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestHttpMethodsTests.java index 0d615a7e46..3832ae3a0b 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestHttpMethodsTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestHttpMethodsTests.java @@ -87,6 +87,18 @@ public class ServletWebRequestHttpMethodsTests { assertNull(servletResponse.getHeader("Last-Modified")); } + // SPR-13516 + @Test + public void checkNotModifiedInvalidStatus() { + long epochTime = currentDate.getTime(); + servletRequest.addHeader("If-Modified-Since", epochTime); + servletResponse.setStatus(0); + + assertTrue(request.checkNotModified(epochTime)); + assertEquals(304, servletResponse.getStatus()); + assertEquals(dateFormat.format(epochTime), servletResponse.getHeader("Last-Modified")); + } + @Test public void checkNotModifiedHeaderAlreadySet() { long epochTime = currentDate.getTime();