Modified: trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp (239574 => 239575)
--- trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp 2019-01-02 20:53:37 UTC (rev 239574)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp 2019-01-02 21:09:13 UTC (rev 239575)
@@ -138,6 +138,10 @@
return nullptr;
return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), CSSPrimitiveValue::UnitType::CSS_NUMBER);
}
+
+ if (token.type() != FunctionToken)
+ return nullptr;
+
CalcParser calcParser(range, CalculationCategory::Number);
if (const CSSCalcValue* calculation = calcParser.value()) {
if (calculation->category() != CalculationCategory::Number || !calculation->isInt())
@@ -147,6 +151,7 @@
return nullptr;
return calcParser.consumeNumber();
}
+
return nullptr;
}
@@ -164,6 +169,10 @@
result = range.consumeIncludingWhitespace().numericValue();
return true;
}
+
+ if (token.type() != FunctionToken)
+ return false;
+
CalcParser calcParser(range, CalculationCategory::Number);
return calcParser.consumePositiveIntegerRaw(result);
}
@@ -170,10 +179,15 @@
bool consumeNumberRaw(CSSParserTokenRange& range, double& result)
{
- if (range.peek().type() == NumberToken) {
+ const CSSParserToken& token = range.peek();
+ if (token.type() == NumberToken) {
result = range.consumeIncludingWhitespace().numericValue();
return true;
}
+
+ if (token.type() != FunctionToken)
+ return false;
+
CalcParser calcParser(range, CalculationCategory::Number, ValueRangeAll);
return calcParser.consumeNumberRaw(result);
}
@@ -187,6 +201,10 @@
return nullptr;
return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), token.unitType());
}
+
+ if (token.type() != FunctionToken)
+ return nullptr;
+
CalcParser calcParser(range, CalculationCategory::Number, ValueRangeAll);
if (const CSSCalcValue* calculation = calcParser.value()) {
// FIXME: Calcs should not be subject to parse time range checks.
@@ -195,6 +213,7 @@
return nullptr;
return calcParser.consumeNumber();
}
+
return nullptr;
}
@@ -216,6 +235,9 @@
)
return consumeNumber(range, ValueRangeAll);
+ if (token.type() != FunctionToken)
+ return nullptr;
+
// "[For calc()], the used value resulting from an _expression_ must be clamped to the range allowed in the target context."
CalcParser calcParser(range, CalculationCategory::Number, ValueRangeAll);
double result;
@@ -279,9 +301,14 @@
CSSPrimitiveValue::UnitType unitType = CSSPrimitiveValue::UnitType::CSS_PX;
return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), unitType);
}
+
+ if (token.type() != FunctionToken)
+ return nullptr;
+
CalcParser calcParser(range, CalculationCategory::Length, valueRange);
if (calcParser.value() && calcParser.value()->category() == CalculationCategory::Length)
return calcParser.consumeValue();
+
return nullptr;
}
@@ -293,6 +320,10 @@
return nullptr;
return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), CSSPrimitiveValue::UnitType::CSS_PERCENTAGE);
}
+
+ if (token.type() != FunctionToken)
+ return nullptr;
+
CalcParser calcParser(range, CalculationCategory::Percent, valueRange);
if (const CSSCalcValue* calculation = calcParser.value()) {
if (calculation->category() == CalculationCategory::Percent)
@@ -322,6 +353,10 @@
return consumeLength(range, cssParserMode, valueRange, unitless);
if (token.type() == PercentageToken)
return consumePercent(range, valueRange);
+
+ if (token.type() != FunctionToken)
+ return nullptr;
+
CalcParser calcParser(range, CalculationCategory::Length, valueRange);
if (const CSSCalcValue* calculation = calcParser.value()) {
if (canConsumeCalcValue(calculation->category(), cssParserMode))
@@ -344,10 +379,13 @@
return nullptr;
}
}
- if (token.type() == NumberToken && shouldAcceptUnitlessValue(token.numericValue(), cssParserMode, unitless)) {
+
+ if (token.type() == NumberToken && shouldAcceptUnitlessValue(token.numericValue(), cssParserMode, unitless))
return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), CSSPrimitiveValue::UnitType::CSS_DEG);
- }
+ if (token.type() != FunctionToken)
+ return nullptr;
+
CalcParser calcParser(range, CalculationCategory::Angle, ValueRangeAll);
if (const CSSCalcValue* calculation = calcParser.value()) {
if (calculation->category() == CalculationCategory::Angle)
@@ -372,9 +410,13 @@
}
if (token.type() == NumberToken && shouldAcceptUnitlessValue(token.numericValue(), cssParserMode, unitless))
return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), CSSPrimitiveValue::UnitType::CSS_DEG);
+
if (token.type() == PercentageToken)
return consumePercent(range, valueRange);
+ if (token.type() != FunctionToken)
+ return nullptr;
+
CalcParser angleCalcParser(range, CalculationCategory::Angle, valueRange);
if (const CSSCalcValue* calculation = angleCalcParser.value()) {
if (calculation->category() == CalculationCategory::Angle)
@@ -389,7 +431,6 @@
return nullptr;
}
-
RefPtr<CSSPrimitiveValue> consumeTime(CSSParserTokenRange& range, CSSParserMode cssParserMode, ValueRange valueRange, UnitlessQuirk unitless)
{
const CSSParserToken& token = range.peek();
@@ -404,6 +445,10 @@
return CSSValuePool::singleton().createValue(range.consumeIncludingWhitespace().numericValue(), unit);
return nullptr;
}
+
+ if (token.type() != FunctionToken)
+ return nullptr;
+
CalcParser calcParser(range, CalculationCategory::Time, valueRange);
if (const CSSCalcValue* calculation = calcParser.value()) {
if (calculation->category() == CalculationCategory::Time)