diff options
author | cybai <cyb.ai.815@gmail.com> | 2023-04-19 18:03:57 +0900 |
---|---|---|
committer | cybai <cyb.ai.815@gmail.com> | 2023-04-21 15:21:53 +0900 |
commit | c77e4e4e69ee50e971f781d03a43cb7ef862a9ec (patch) | |
tree | 7b27a7e352951a3423115a7b377ef84db4682e71 /components/script/dom/htmlcollection.rs | |
parent | 9acb9cc5cf21d14709355a3c75af7202e9301bd5 (diff) | |
download | servo-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.rs | 6 |
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)) } |