-
Notifications
You must be signed in to change notification settings - Fork 909
allow single "=" as query #5823
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
public void uriParamsWithSingleEqualQuery() throws URISyntaxException { | ||
URI uri = URI.create("http://example.com?="); | ||
Map<String, List<String>> uriParams = SdkHttpUtils.uriParams(uri); | ||
assertThat(uriParams).isEmpty(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider
@Test
public void uriParamsWithEmptyKeyAndValue() throws URISyntaxException { //Interested
URI uri = URI.create("http://example.com?=myValue");
Map<String, List<String>> uriParams = SdkHttpUtils.uriParams(uri);
System.out.println("uriParams " +uriParams);
}
For http://example.com?=myValue
the uriParams looks like
uriParams {=[myValue]}
If you see here the Key in the Map is empty .
Now based on this for "http://example.com?="
we should have empty key with empty list or null as below
uriParams {=[]}
or uriParams {=null}
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Discussed offline, {=null} conforms with current implementation
@@ -238,6 +238,13 @@ public void uriParams() throws URISyntaxException { | |||
entry("decoded&Part", Arrays.asList("equals=val"))); | |||
} | |||
|
|||
@Test |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Test | |
@Test | |
void uriParamsWithSingleEqualQuery() { | |
URI uri = URI.create("http://example.com?="); | |
Map<String, List<String>> uriParams = SdkHttpUtils.uriParams(uri); | |
assertThat(uriParams).containsKey(""); | |
assertThat(uriParams.get("")) | |
.isNotNull() | |
.hasSize(1) | |
.containsNull(); | |
} | |
@Test | |
void uriParamsWithSingleEqualWithValueQuery() { | |
URI uri = URI.create("http://example.com?=nokeyvalue"); | |
Map<String, List<String>> uriParams = SdkHttpUtils.uriParams(uri); | |
assertThat(uriParams).containsKey(""); | |
assertThat(uriParams.get("")) | |
.isNotNull() | |
.hasSize(1) | |
.contains("nokeyvalue"); | |
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also for completeness can we add test in SdkHttpRequestResponseTest since this tests the Public API
@Test
public void testSdkHttpRequestWithEmptyEqualQueryParameterName() {
final String expected = "http://example.com?=";
URI myUri = URI.create(expected);
SdkHttpRequest actual = SdkHttpRequest.builder().method(SdkHttpMethod.POST).uri(myUri).build();
assertThat(actual.getUri()).hasToString(expected);
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This test will fail because our current implementation will eliminate "=" when there are no query values. I added a test that the expected result string is "http://example.com?"
"type": "bugfix", | ||
"category": "AWS SDK for Java v2", | ||
"contributor": "", | ||
"description": "Fixed the bug \"ArrayIndexOutOfBoundsException\" when single \"=\" as the query string" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we be specific about the fix is made in SdkHttpFullRequest
Fixed an issue in SdkHttpFullRequest where constructing with a query string consisting of a single \"=\" would throw an ArrayIndexOutOfBoundsException.
or something that is more specific ?
|
.map(s -> s.length == 0 ? new String[] {""} : s) | ||
.map(s -> s.length == 1 ? new String[] { s[0], null } : s) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
.map(s -> s.length == 0 ? new String[] {""} : s) | |
.map(s -> s.length == 1 ? new String[] { s[0], null } : s) | |
.map(s -> { | |
if (s.length == 0) { | |
return new String[] {""}; | |
} | |
return s.length == 1 ? new String[] {s[0], null} : s; | |
}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you mean return new String[] {"", null};
in line 410? cause otherwise it will fail on original line 410
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ah I see, yup
* allow single = as query * unit test added * changelog added * changed the behavior * minor change * more test cases added
* allow single = as query * unit test added * changelog added * changed the behavior * minor change * more test cases added
Motivation and Context
There is a issue on SdkHttpFullRequest throws exception when constructing with query string is a single "=". The "=" query is valid according to RFC spec. We should treat it as a valid query string. This is because when spliting query strings, "=" will be splited to an empty list, resulting in array out of bound.
Fixed the bug "ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0" when "=" as the query string
Modifications
Testing
Screenshots (if appropriate)
Types of changes
Checklist
mvn install
succeedsscripts/new-change
script and following the instructions. Commit the new file created by the script in.changes/next-release
with your changes.License