Skip to content

Commit e1bbc29

Browse files
Fixed the inconsistency with rfc6570#section-3.2.1
1 parent 5096211 commit e1bbc29

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

google-http-client/src/main/java/com/google/api/client/http/UriTemplate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ private String getEncodedValue(String value) {
159159
String encodedValue;
160160
if (reservedExpansion) {
161161
// Reserved expansion allows percent-encoded triplets and characters in the reserved set.
162-
encodedValue = CharEscapers.escapeUriPathWithoutReserved(value);
162+
encodedValue = CharEscapers.escapeUriPathWithoutReservedAndPercentEncoded(value);
163163
} else {
164164
encodedValue = CharEscapers.escapeUriConformant(value);
165165
}

google-http-client/src/test/java/com/google/api/client/http/UriTemplateTest.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,4 +380,57 @@ public void testExpandTemplates_reservedExpansion_mustNotEscapeUnreservedCharSet
380380
unReservedSet,
381381
UriTemplate.expand("{+var}", requestMap, false));
382382
}
383+
384+
@Test
385+
// These tests are from the uri-template test suite
386+
// https://github.com/uri-templates/uritemplate-test/blob/master/extended-tests.json
387+
public void testExpandTemplates_reservedExpansion_alreadyEncodedInput() {
388+
Map<String, Object> variables = Maps.newLinkedHashMap();
389+
variables.put("id", "admin%2F");
390+
assertEquals("admin%252F", UriTemplate.expand("{id}", variables, false));
391+
assertEquals("admin%2F", UriTemplate.expand("{+id}", variables, false));
392+
assertEquals("#admin%2F", UriTemplate.expand("{#id}", variables, false));
393+
}
394+
395+
@Test
396+
// These tests are from the uri-template test suite
397+
// https://github.com/uri-templates/uritemplate-test/blob/master/extended-tests.json
398+
public void testExpandTemplates_reservedExpansion_notEncodedInput() {
399+
Map<String, Object> variables = Maps.newLinkedHashMap();
400+
variables.put("not_pct", "%foo");
401+
assertEquals("%25foo", UriTemplate.expand("{not_pct}", variables, false));
402+
assertEquals("%25foo", UriTemplate.expand("{+not_pct}", variables, false));
403+
assertEquals("#%25foo", UriTemplate.expand("{#not_pct}", variables, false));
404+
}
405+
406+
@Test
407+
// These tests are from the uri-template test suite
408+
// https://github.com/uri-templates/uritemplate-test/blob/master/extended-tests.json
409+
public void testExpandTemplates_reservedExpansion_listExpansionWithMixedEncodedInput() {
410+
Map<String, Object> variables = Maps.newLinkedHashMap();
411+
variables.put("list", Arrays.asList("red%25", "%2Fgreen", "blue "));
412+
assertEquals("red%2525,%252Fgreen,blue%20", UriTemplate.expand("{list}", variables, false));
413+
assertEquals("red%25,%2Fgreen,blue%20", UriTemplate.expand("{+list}", variables, false));
414+
assertEquals("#red%25,%2Fgreen,blue%20", UriTemplate.expand("{#list}", variables, false));
415+
}
416+
417+
@Test
418+
// These tests are from the uri-template test suite
419+
// https://github.com/uri-templates/uritemplate-test/blob/master/extended-tests.json with an
420+
// additional map entry
421+
public void testExpandTemplates_reservedExpansion_mapWithMixedEncodedInput() {
422+
Map<String, Object> variables = Maps.newLinkedHashMap();
423+
Map<String, String> keys = Maps.newLinkedHashMap();
424+
keys.put("key1", "val1%2F");
425+
keys.put("key2", "val2%2F");
426+
keys.put("key3", "val ");
427+
variables.put("keys", keys);
428+
assertEquals(
429+
"key1,val1%252F,key2,val2%252F,key3,val%20",
430+
UriTemplate.expand("{keys}", variables, false));
431+
assertEquals(
432+
"key1,val1%2F,key2,val2%2F,key3,val%20", UriTemplate.expand("{+keys}", variables, false));
433+
assertEquals(
434+
"#key1,val1%2F,key2,val2%2F,key3,val%20", UriTemplate.expand("{#keys}", variables, false));
435+
}
383436
}

0 commit comments

Comments
 (0)