From 751733ab8b3cb3af3c3462b62dbfa53f6a3a8111 Mon Sep 17 00:00:00 2001 From: Martin Broesamle Date: Thu, 28 Apr 2016 13:21:30 +0200 Subject: [PATCH] Avoid panics when using HTMLAnchorElement attribute setters Fixes #10877. Includes new test for attribute getters and setters. --- components/script/dom/htmlanchorelement.rs | 23 ++++--- tests/wpt/metadata/MANIFEST.json | 11 +++- ...anchorelement_attribute-getter-setter.html | 65 +++++++++++++++++++ 3 files changed, 86 insertions(+), 13 deletions(-) create mode 100644 tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs index 43ff211dfce..5b0f1801c25 100644 --- a/components/script/dom/htmlanchorelement.rs +++ b/components/script/dom/htmlanchorelement.rs @@ -81,9 +81,8 @@ impl HTMLAnchorElement { } // https://html.spec.whatwg.org/multipage/#update-href - fn update_href(&self) { - self.upcast::().set_string_attribute(&atom!("href"), - self.url.borrow().as_ref().unwrap().as_str().into()); + fn update_href(&self, url: &Url) { + self.upcast::().set_string_attribute(&atom!("href"), DOMString::from(url.as_str())); } } @@ -168,7 +167,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Steps 4-5. UrlHelper::SetHash(url, value); // Step 6. - self.update_href(); + self.update_href(url); } } @@ -204,7 +203,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 4. UrlHelper::SetHost(url, value); // Step 5. - self.update_href(); + self.update_href(url); } } @@ -236,7 +235,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 4. UrlHelper::SetHostname(url, value); // Step 5. - self.update_href(); + self.update_href(url); } } @@ -292,7 +291,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 4. UrlHelper::SetPassword(url, value); // Step 5. - self.update_href(); + self.update_href(url); } } @@ -320,7 +319,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 5. UrlHelper::SetPathname(url, value); // Step 6. - self.update_href(); + self.update_href(url); } } @@ -352,7 +351,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 4. UrlHelper::SetPort(url, value); // Step 5. - self.update_href(); + self.update_href(url); } } @@ -379,7 +378,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 3. UrlHelper::SetProtocol(url, value); // Step 4. - self.update_href(); + self.update_href(url); } } @@ -408,7 +407,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // encoding override (as described in the spec) UrlHelper::SetSearch(url, value); // Step 6. - self.update_href(); + self.update_href(url); } } @@ -439,7 +438,7 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement { // Step 4. UrlHelper::SetUsername(url, value); // Step 5. - self.update_href(); + self.update_href(url); } } diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index e82ec5fdbc1..5d15dd24f6d 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -35936,7 +35936,16 @@ "local_changes": { "deleted": [], "deleted_reftests": {}, - "items": {}, + "items": { + "testharness": { + "html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html": [ + { + "path": "html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html", + "url": "/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html" + } + ] + } + }, "reftest_nodes": {} }, "reftest_nodes": { diff --git a/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html b/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html new file mode 100644 index 00000000000..2db3082e214 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html @@ -0,0 +1,65 @@ + + + + +HTMLAnchorElement getters and setters + + +anchor + + +