diff options
author | michael@notriddle.com <michael@notriddle.com> | 2017-03-25 01:55:16 +0000 |
---|---|---|
committer | michael@notriddle.com <michael@notriddle.com> | 2017-03-25 01:55:16 +0000 |
commit | 67fa2d6f62a48b64906688f822be74c57a2267a7 (patch) | |
tree | b8853bf4ba8de310e18b24d926768574ed19c910 | |
parent | 1584bbd3ecc2a86339f8fe2ccb88bd30fc462b1c (diff) | |
download | servo-cb_split.tar.gz servo-cb_split.zip |
Avoid splitting a code point when parsing HTMLImageElement.usemapcb_split
Fixes #15883
-rw-r--r-- | components/script/dom/htmlimageelement.rs | 7 | ||||
-rw-r--r-- | tests/wpt/web-platform-tests/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference-test-data.html | 8 |
2 files changed, 12 insertions, 3 deletions
diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index 610b0a3fae0..71ff0c82761 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -422,16 +422,17 @@ impl HTMLImageElement { }; let value = usemap_attr.value(); - let (first, last) = value.split_at(1); - if first != "#" || last.len() == 0 { + if value.len() <= 1 || value.bytes()[0] != b'#' { return None } + let value = &value[1..]; + let map = self.upcast::<Node>() .following_siblings() .filter_map(Root::downcast::<HTMLMapElement>) - .find(|n| n.upcast::<Element>().get_string_attribute(&LocalName::from("name")) == last); + .find(|n| n.upcast::<Element>().get_string_attribute(&LocalName::from("name")) == value); let elements: Vec<Root<HTMLAreaElement>> = map.unwrap().upcast::<Node>() .children() diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference-test-data.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference-test-data.html index 735ba8cf086..9c5b7b27a89 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference-test-data.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference-test-data.html @@ -12,6 +12,14 @@ <body> <div data-expect="no match"> + <img src="/images/threecolors.png" usemap="💩"/> + <object data="/images/threecolors.png" usemap="💩"></object> + <map name="💩"> + <area shape="rect" coords="0,0,99,50" href="#area-💩"/> + </map> +</div> + +<div data-expect="no match"> <img src="/images/threecolors.png" usemap="no-hash-name"/> <object data="/images/threecolors.png" usemap="no-hash-name"></object> <map name="no-hash-name"> |