render: reject unitless nonzero lengths
This commit is contained in:
1 parent
1b313ecb49
commit
2c12b5a03a
1 file changed
+16
-1
@@ -2639,7 +2639,13 @@ fn dimension_value(tok: &str) -> crate::Dimension {
|
||||
if let Some(v) = lower.strip_suffix("vh").and_then(parse) { return Dimension::Vh(v); }
|
||||
if let Some(v) = lower.strip_suffix("px").and_then(parse) { return Dimension::Px(v); }
|
||||
if let Some(v) = lower.strip_suffix("pt").and_then(parse) { return Dimension::Px(v * 1.333); }
|
||||
if let Some(v) = parse(&lower) { return Dimension::Px(v); }
|
||||
// CSS lengths accept a unitless number only when it is zero. Treating
|
||||
// arbitrary numbers as pixels changes invalid declarations into tiny
|
||||
// geometry (for example `font-size:.813` must be ignored and inherited,
|
||||
// not rendered at 0.813px).
|
||||
if let Some(v) = parse(&lower).filter(|v| *v == 0.0) {
|
||||
return Dimension::Px(v);
|
||||
}
|
||||
Dimension::Auto
|
||||
}
|
||||
|
||||
@@ -3583,6 +3589,15 @@ mod tests {
|
||||
assert_eq!(computed_font_weight(Some("lighter"), 900), 700);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn nonzero_unitless_font_size_is_invalid() {
|
||||
let inherited = compute_style("div", Some("font-size:14px;font-size:.813"));
|
||||
assert_eq!(inherited.font_size, Some(14.0));
|
||||
|
||||
let zero = compute_style("div", Some("font-size:0"));
|
||||
assert_eq!(zero.font_size, Some(0.0));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn containing_block_property_triggers_are_independent() {
|
||||
let s = compute_style("div", Some("transform:rotate(0deg);filter:none"));
|
||||
|
||||
Reference in new issue
Block a user