From aad440918d26beb4459c12813bf0b8dbb2afd5e7 Mon Sep 17 00:00:00 2001 From: Vladimir Kuptsov Date: Wed, 1 Feb 2017 22:53:36 +0100 Subject: [PATCH 1/3] + null-check for AwsProxyRequest query string parameters --- .../servlet/AwsProxyHttpServletRequest.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index cc3ef769b..252e9e743 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -529,7 +529,10 @@ public String getParameter(String s) { @Override public Enumeration getParameterNames() { List paramNames = new ArrayList<>(); - paramNames.addAll(request.getQueryStringParameters().keySet()); + Map queryStringParameters = request.getQueryStringParameters(); + if (queryStringParameters != null) { + paramNames.addAll(queryStringParameters.keySet()); + } paramNames.addAll(urlEncodedFormParameters.keySet()); return Collections.enumeration(paramNames); } @@ -567,13 +570,16 @@ public Map getParameterMap() { params = new HashMap<>(); } - for (Map.Entry entry : request.getQueryStringParameters().entrySet()) { - if (params.containsKey(entry.getKey())) { - params.get(entry.getKey()).add(entry.getValue()); - } else { - List valueList = new ArrayList<>(); - valueList.add(entry.getValue()); - params.put(entry.getKey(), valueList); + Map queryStringParameters = request.getQueryStringParameters(); + if (queryStringParameters != null) { + for (Map.Entry entry : queryStringParameters.entrySet()) { + if (params.containsKey(entry.getKey())) { + params.get(entry.getKey()).add(entry.getValue()); + } else { + List valueList = new ArrayList<>(); + valueList.add(entry.getValue()); + params.put(entry.getKey(), valueList); + } } } @@ -780,13 +786,14 @@ private String getHeaderCaseInsensitive(String key) { private String getQueryStringParameterCaseInsensitive(String key) { - if (request.getQueryStringParameters() == null) { + Map queryStringParameters = request.getQueryStringParameters(); + if (queryStringParameters == null) { return null; } - for (String requestParamKey : request.getQueryStringParameters().keySet()) { + for (String requestParamKey : queryStringParameters.keySet()) { if (key.toLowerCase().equals(requestParamKey.toLowerCase())) { - return request.getQueryStringParameters().get(requestParamKey); + return queryStringParameters.get(requestParamKey); } } return null; From 4fcfb3a23135b5f593bfab48448b543b63597a47 Mon Sep 17 00:00:00 2001 From: Vladimir Kuptsov Date: Wed, 1 Feb 2017 23:23:09 +0100 Subject: [PATCH 2/3] + tests for nullable query parameters --- .../AwsProxyHttpServletRequestTest.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index 9295cb91a..d9ddc313b 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -8,6 +8,10 @@ import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; + import static org.junit.Assert.*; public class AwsProxyHttpServletRequestTest { @@ -39,6 +43,16 @@ public class AwsProxyHttpServletRequestTest { private static final AwsProxyRequest REQUEST_MALFORMED_COOKIE = new AwsProxyRequestBuilder("/hello", "GET") .header(HttpHeaders.COOKIE, QUERY_STRING_NAME_VALUE).build(); + private static final AwsProxyRequest REQUEST_NULL_QUERY_STRING; + static { + AwsProxyRequest awsProxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); + awsProxyRequest.setQueryStringParameters(null); + REQUEST_NULL_QUERY_STRING = awsProxyRequest; + } + + private static final AwsProxyRequest REQUEST_QUERY = new AwsProxyRequestBuilder("/hello", "POST") + .queryString(FORM_PARAM_NAME, QUERY_STRING_NAME_VALUE).build(); + @Test public void headers_getHeader_validRequest() { @@ -131,4 +145,36 @@ public void cookie_getCookies_emptyCookies() { assertNotNull(request.getCookies()); assertEquals(0, request.getCookies().length); } + + @Test + public void queryParameters_getParameterMap_null() { + HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_NULL_QUERY_STRING, null, null); + assertNotNull(request); + assertEquals(0, request.getParameterMap().size()); + } + + @Test + public void queryParameters_getParameterMap_nonNull() { + HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_QUERY, null, null); + assertNotNull(request); + assertEquals(1, request.getParameterMap().size()); + assertEquals(QUERY_STRING_NAME_VALUE, request.getParameterMap().get(FORM_PARAM_NAME)[0]); + } + + @Test + public void queryParameters_getParameterNames_null() { + HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_NULL_QUERY_STRING, null, null); + List parameterNames = Collections.list(request.getParameterNames()); + assertNotNull(request); + assertEquals(0, parameterNames.size()); + } + + @Test + public void queryParameters_getParameterNames_nonNull() { + HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_QUERY, null, null); + List parameterNames = Collections.list(request.getParameterNames()); + assertNotNull(request); + assertEquals(1, parameterNames.size()); + assertTrue(parameterNames.contains(FORM_PARAM_NAME)); + } } From fc790409d76222462edcc8344b4b41cc8321e3ff Mon Sep 17 00:00:00 2001 From: Vladimir Kuptsov Date: Thu, 2 Feb 2017 06:47:19 +0100 Subject: [PATCH 3/3] - extracted variable for request.getQueryStringParameters() according to comments in PR --- .../servlet/AwsProxyHttpServletRequest.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 252e9e743..fb69d5d62 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -529,9 +529,8 @@ public String getParameter(String s) { @Override public Enumeration getParameterNames() { List paramNames = new ArrayList<>(); - Map queryStringParameters = request.getQueryStringParameters(); - if (queryStringParameters != null) { - paramNames.addAll(queryStringParameters.keySet()); + if (request.getQueryStringParameters() != null) { + paramNames.addAll(request.getQueryStringParameters().keySet()); } paramNames.addAll(urlEncodedFormParameters.keySet()); return Collections.enumeration(paramNames); @@ -570,9 +569,8 @@ public Map getParameterMap() { params = new HashMap<>(); } - Map queryStringParameters = request.getQueryStringParameters(); - if (queryStringParameters != null) { - for (Map.Entry entry : queryStringParameters.entrySet()) { + if (request.getQueryStringParameters() != null) { + for (Map.Entry entry : request.getQueryStringParameters().entrySet()) { if (params.containsKey(entry.getKey())) { params.get(entry.getKey()).add(entry.getValue()); } else { @@ -786,14 +784,13 @@ private String getHeaderCaseInsensitive(String key) { private String getQueryStringParameterCaseInsensitive(String key) { - Map queryStringParameters = request.getQueryStringParameters(); - if (queryStringParameters == null) { + if (request.getQueryStringParameters() == null) { return null; } - for (String requestParamKey : queryStringParameters.keySet()) { + for (String requestParamKey : request.getQueryStringParameters().keySet()) { if (key.toLowerCase().equals(requestParamKey.toLowerCase())) { - return queryStringParameters.get(requestParamKey); + return request.getQueryStringParameters().get(requestParamKey); } } return null;