aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormichael@notriddle.com <michael@notriddle.com>2017-03-25 01:55:16 +0000
committermichael@notriddle.com <michael@notriddle.com>2017-03-25 01:55:16 +0000
commit67fa2d6f62a48b64906688f822be74c57a2267a7 (patch)
treeb8853bf4ba8de310e18b24d926768574ed19c910
parent1584bbd3ecc2a86339f8fe2ccb88bd30fc462b1c (diff)
downloadservo-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.rs7
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference-test-data.html8
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="&#x1F4A9;"/>
+ <object data="/images/threecolors.png" usemap="&#x1F4A9;"></object>
+ <map name="&#x1F4A9;">
+ <area shape="rect" coords="0,0,99,50" href="#area-&#x1F4A9;"/>
+ </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">