Refine StringUtils#uriDecode
Refine the StringUtils#uriDecode method in the following ways: - Use a StringBuilder instead of ByteArrayOutputStream, and only decode %-encoded sequences. - Use HexFormat.fromHexDigits to decode hex sequences. - Decode to a byte array that is only allocated if encoded sequences are encountered. Signed-off-by: Patrick Strawderman <pstrawderman@netflix.com> See gh-34673
This commit is contained in:
committed by
Sébastien Deleuze
parent
0b92a51650
commit
7f1bc20688
@@ -107,12 +107,19 @@ class UriUtilsTests {
|
||||
assertThat(UriUtils.decode("T%C5%8Dky%C5%8D", CHARSET)).as("Invalid encoded result").isEqualTo("T\u014dky\u014d");
|
||||
assertThat(UriUtils.decode("/Z%C3%BCrich", CHARSET)).as("Invalid encoded result").isEqualTo("/Z\u00fcrich");
|
||||
assertThat(UriUtils.decode("T\u014dky\u014d", CHARSET)).as("Invalid encoded result").isEqualTo("T\u014dky\u014d");
|
||||
assertThat(UriUtils.decode("%20\u2019", CHARSET)).as("Invalid encoded result").isEqualTo(" \u2019");
|
||||
}
|
||||
|
||||
@Test
|
||||
void decodeInvalidSequence() {
|
||||
assertThatIllegalArgumentException().isThrownBy(() ->
|
||||
UriUtils.decode("foo%2", CHARSET));
|
||||
assertThatIllegalArgumentException().isThrownBy(() ->
|
||||
UriUtils.decode("foo%", CHARSET));
|
||||
assertThatIllegalArgumentException().isThrownBy(() ->
|
||||
UriUtils.decode("%", CHARSET));
|
||||
assertThatIllegalArgumentException().isThrownBy(() ->
|
||||
UriUtils.decode("%zz", CHARSET));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user