Fix UriComponentsBuilder.fromUriString parsing error
This commit fixes cases where part of the URI was mistaken for the userinfo when: * the URI did not contain any path * the query string contained the "@" Issue: SPR-11964
This commit is contained in:
@@ -62,7 +62,7 @@ public class UriComponentsBuilder {
|
|||||||
|
|
||||||
private static final String HTTP_PATTERN = "(?i)(http|https):";
|
private static final String HTTP_PATTERN = "(?i)(http|https):";
|
||||||
|
|
||||||
private static final String USERINFO_PATTERN = "([^@/]*)";
|
private static final String USERINFO_PATTERN = "([^@\\[/?#]*)";
|
||||||
|
|
||||||
private static final String HOST_IPV4_PATTERN = "[^\\[/?#:]*";
|
private static final String HOST_IPV4_PATTERN = "[^\\[/?#:]*";
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import org.junit.Test;
|
|||||||
|
|
||||||
import org.springframework.util.LinkedMultiValueMap;
|
import org.springframework.util.LinkedMultiValueMap;
|
||||||
import org.springframework.util.MultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.*;
|
import static org.hamcrest.Matchers.*;
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
@@ -216,6 +217,17 @@ public class UriComponentsBuilderTests {
|
|||||||
assertEquals("[::192.168.1.1]", resultIPv4compatible.getHost());
|
assertEquals("[::192.168.1.1]", resultIPv4compatible.getHost());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SPR-11970
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void fromUriStringNoPathWithReservedCharInQuery() {
|
||||||
|
UriComponents result = UriComponentsBuilder.fromUriString("http://example.com?foo=bar@baz").build();
|
||||||
|
assertTrue(StringUtils.isEmpty(result.getUserInfo()));
|
||||||
|
assertEquals("example.com", result.getHost());
|
||||||
|
assertTrue(result.getQueryParams().containsKey("foo"));
|
||||||
|
assertEquals("bar@baz", result.getQueryParams().getFirst("foo"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void path() throws URISyntaxException {
|
public void path() throws URISyntaxException {
|
||||||
UriComponentsBuilder builder = UriComponentsBuilder.fromPath("/foo/bar");
|
UriComponentsBuilder builder = UriComponentsBuilder.fromPath("/foo/bar");
|
||||||
|
|||||||
Reference in New Issue
Block a user