Bug 1358754 - Fix overflow in ::nth-child(). r?bholley
MozReview-Commit-ID: CZ9ZR3j8hQt
--- a/servo/components/selectors/matching.rs
+++ b/servo/components/selectors/matching.rs
@@ -475,18 +475,23 @@ fn matches_generic_nth_child<E, F>(eleme
} else {
sibling.prev_sibling_element()
};
}
if a == 0 {
b == index
} else {
- (index - b) / a >= 0 &&
- (index - b) % a == 0
+ match index.checked_sub(b) {
+ None => false,
+ Some(r) => {
+ r.checked_div(a).map_or(false, |r| r >= 0) &&
+ r.checked_rem(a).map_or(false, |r| r == 0)
+ },
+ }
}
}
#[inline]
fn matches_first_child<E, F>(element: &E, flags_setter: &mut F) -> bool
where E: Element,
F: FnMut(&E, ElementSelectorFlags),
{