Skip to content

Commit 17cae7b

Browse files
committed
fix: Addresses bug reported in query string parsing for HTTP API support where we have a query string key, followed by a value declarator (=), but then no value
1 parent 1b7a001 commit 17cae7b

1 file changed

Lines changed: 11 additions & 8 deletions

File tree

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -482,16 +482,19 @@ private MultiValuedTreeMap<String, String> parseRawQueryString(String qs) {
482482

483483
MultiValuedTreeMap<String, String> qsMap = new MultiValuedTreeMap<>();
484484
for (String value : qs.split(QUERY_STRING_SEPARATOR)) {
485-
if (!value.contains(QUERY_STRING_KEY_VALUE_SEPARATOR)) {
486-
log.warn("Invalid query string parameter: " + SecurityUtils.crlf(value));
487-
continue;
488-
}
489-
490-
String[] kv = value.split(QUERY_STRING_KEY_VALUE_SEPARATOR);
491485
try {
492-
qsMap.add(URLDecoder.decode(kv[0], LambdaContainerHandler.getContainerConfig().getUriEncoding()), kv[1]);
486+
if (!value.contains(QUERY_STRING_KEY_VALUE_SEPARATOR)) {
487+
qsMap.add(URLDecoder.decode(value, LambdaContainerHandler.getContainerConfig().getUriEncoding()), null);
488+
log.warn("Query string parameter with empty value and no =: " + SecurityUtils.crlf(value));
489+
continue;
490+
}
491+
492+
String[] kv = value.split(QUERY_STRING_KEY_VALUE_SEPARATOR);
493+
String key = URLDecoder.decode(kv[0], LambdaContainerHandler.getContainerConfig().getUriEncoding());
494+
String val = kv.length == 2 ? kv[1] : null;
495+
qsMap.add(key, val);
493496
} catch (UnsupportedEncodingException e) {
494-
log.error("Unsupported encoding in query string key: " + SecurityUtils.crlf(kv[0]), e);
497+
log.error("Unsupported encoding in query string key: " + value, e);
495498
}
496499
}
497500
return qsMap;

0 commit comments

Comments
 (0)