Require spaces around operators in calc() (fixes #15486)

This commit is contained in:
radhika2896 2017-03-07 21:06:38 -05:00 committed by Anthony Ramine
parent 8b60a409c1
commit 0138bbcdd1
3 changed files with 37 additions and 10 deletions

View file

@ -584,19 +584,33 @@ impl CalcLengthOrPercentage {
let mut products = Vec::new();
products.push(try!(CalcLengthOrPercentage::parse_product(input, expected_unit)));
while let Ok(token) = input.next() {
match token {
Token::Delim('+') => {
loop {
let position = input.position();
match input.next_including_whitespace() {
Ok(Token::WhiteSpace(_)) => {
match input.next() {
Ok(Token::Delim('+')) => {
products.push(try!(CalcLengthOrPercentage::parse_product(input, expected_unit)));
}
Token::Delim('-') => {
Ok(Token::Delim('-')) => {
let mut right = try!(CalcLengthOrPercentage::parse_product(input, expected_unit));
right.values.push(CalcValueNode::Number(-1.));
products.push(right);
}
_ => return Err(())
_ => {
return Err(());
}
}
}
_ => {
input.reset(position);
break
}
}
}
Ok(CalcSumNode { products: products })
}

View file

@ -0,0 +1,12 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use parsing::parse;
use style::parser::Parse;
use style::values::specified::length::Length;
#[test]
fn test_calc() {
assert!(parse(Length::parse, "calc(1px+ 2px)").is_err());
}

View file

@ -87,6 +87,7 @@ mod font;
mod image;
mod inherited_box;
mod inherited_text;
mod length;
mod mask;
mod outline;
mod position;