Skip to content

Commit

Permalink
Auto merge of servo#248 - Manishearth:percent-fragment, r=SimonSapin
Browse files Browse the repository at this point in the history
Percent-encode fragments while parsing

Based on whatwg/url#169

Fixes servo#246

cc @valenting

r? @SimonSapin

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/rust-url/248)
<!-- Reviewable:end -->
  • Loading branch information
bors-servo authored Dec 15, 2016
2 parents 117d6f2 + 6512d12 commit 37fe8a7
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 13 deletions.
5 changes: 3 additions & 2 deletions src/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1083,12 +1083,13 @@ impl<'a> Parser<'a> {
}

pub fn parse_fragment(&mut self, mut input: Input) {
while let Some(c) = input.next() {
while let Some((c, utf8_c)) = input.next_utf8() {
if c == '\0' {
self.syntax_violation("NULL characters are ignored in URL fragment identifiers")
} else {
self.check_url_code_point(c, &input);
self.serialization.push(c); // No percent-encoding here.
self.serialization.extend(utf8_percent_encode(utf8_c,
SIMPLE_ENCODE_SET));
}
}
}
Expand Down
10 changes: 5 additions & 5 deletions tests/setters_tests.json
Original file line number Diff line number Diff line change
Expand Up @@ -1127,21 +1127,21 @@
}
},
{
"comment": "No percent-encoding at all (!); nuls, tabs, and newlines are removed. Leading or training C0 controls and space are removed.",
"comment": "Simple percent-encoding; nuls, tabs, and newlines are removed",
"href": "a:/",
"new_value": "\u0000\u0001\t\n\r\u001f !\u0000\u0001\t\n\r\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé",
"expected": {
"href": "a:/#!\u0001\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé",
"hash": "#!\u0001\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé"
"href": "a:/#!%01%1F !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~%7F%C2%80%C2%81%C3%89%C3%A9",
"hash": "#!%01%1F !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~%7F%C2%80%C2%81%C3%89%C3%A9"
}
},
{
"comment": "Bytes already percent-encoded are left as-is",
"href": "http://example.net",
"new_value": "%c3%89té",
"expected": {
"href": "http://example.net/#%c3%89té",
"hash": "#%c3%89té"
"href": "http://example.net/#%c3%89t%C3%A9",
"hash": "#%c3%89t%C3%A9"
}
}
]
Expand Down
29 changes: 23 additions & 6 deletions tests/urltestdata.json
Original file line number Diff line number Diff line change
Expand Up @@ -1292,7 +1292,7 @@
{
"input": "",
"base": "http://example.org/foo/bar",
"href": "http://example.org/foo/bar#β",
"href": "http://example.org/foo/bar#%CE%B2",
"origin": "http://example.org",
"protocol": "http:",
"username": "",
Expand All @@ -1302,7 +1302,7 @@
"port": "",
"pathname": "/foo/bar",
"search": "",
"hash": "#β"
"hash": "#%CE%B2"
},
{
"input": "data:text/html,test#test",
Expand Down Expand Up @@ -2161,7 +2161,7 @@
{
"input": "http://www.google.com/foo?bar=baz# »",
"base": "about:blank",
"href": "http://www.google.com/foo?bar=baz# »",
"href": "http://www.google.com/foo?bar=baz# %C2%BB",
"origin": "http://www.google.com",
"protocol": "http:",
"username": "",
Expand All @@ -2171,12 +2171,12 @@
"port": "",
"pathname": "/foo",
"search": "?bar=baz",
"hash": "# »"
"hash": "# %C2%BB"
},
{
"input": "data:test# »",
"base": "about:blank",
"href": "data:test# »",
"href": "data:test# %C2%BB",
"origin": "null",
"protocol": "data:",
"username": "",
Expand All @@ -2186,7 +2186,7 @@
"port": "",
"pathname": "test",
"search": "",
"hash": "# »"
"hash": "# %C2%BB"
},
{
"input": "http://[www.google.com]/",
Expand Down Expand Up @@ -4356,5 +4356,22 @@
"search": "",
"searchParams": "",
"hash": ""
},
"# Percent encoding of fragments",
{
"input": "http://foo.bar/baz?qux#foo\bbar",
"base": "about:blank",
"href": "http://foo.bar/baz?qux#foo%08bar",
"origin": "http://foo.bar",
"protocol": "http:",
"username": "",
"password": "",
"host": "foo.bar",
"hostname": "foo.bar",
"port": "",
"pathname": "/baz",
"search": "?qux",
"searchParams": "",
"hash": "#foo%08bar"
}
]

0 comments on commit 37fe8a7

Please sign in to comment.