aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlcollection.rs
diff options
context:
space:
mode:
authorcybai <cyb.ai.815@gmail.com>2023-04-19 18:03:57 +0900
committercybai <cyb.ai.815@gmail.com>2023-04-21 15:21:53 +0900
commitc77e4e4e69ee50e971f781d03a43cb7ef862a9ec (patch)
tree7b27a7e352951a3423115a7b377ef84db4682e71 /components/script/dom/htmlcollection.rs
parent9acb9cc5cf21d14709355a3c75af7202e9301bd5 (diff)
downloadservo-c77e4e4e69ee50e971f781d03a43cb7ef862a9ec.tar.gz
servo-c77e4e4e69ee50e971f781d03a43cb7ef862a9ec.zip
Fix checking for empty set for getElementsByClassName
Because empty set with `.all(predicate)` will always return `true`, it will result in always filtering wrong elements when the classes is empty set. Thus, we return earlier with `always_empty` HTMLCollection in the mpety classes case so that we can avoid filtering on empty sets.
Diffstat (limited to 'components/script/dom/htmlcollection.rs')
-rw-r--r--components/script/dom/htmlcollection.rs6
1 files changed, 6 insertions, 0 deletions
diff --git a/components/script/dom/htmlcollection.rs b/components/script/dom/htmlcollection.rs
index d5198b94986..f1eb1fdd706 100644
--- a/components/script/dom/htmlcollection.rs
+++ b/components/script/dom/htmlcollection.rs
@@ -252,11 +252,17 @@ impl HTMLCollection {
let case_sensitivity = document_from_node(elem)
.quirks_mode()
.classes_and_ids_case_sensitivity();
+
self.classes
.iter()
.all(|class| elem.has_class(class, case_sensitivity))
}
}
+
+ if classes.is_empty() {
+ return HTMLCollection::always_empty(window, root);
+ }
+
let filter = ClassNameFilter { classes: classes };
HTMLCollection::create(window, root, Box::new(filter))
}