| Index: third_party/WebKit/Source/core/css/CSSCalculationValue.cpp
|
| diff --git a/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp b/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp
|
| index 71464e4f49692b8986bcb2efe01cf2fa13c546e5..fc1115d290b7b75ae992881544438374426eb800 100644
|
| --- a/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp
|
| +++ b/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp
|
| @@ -185,19 +185,22 @@ class CSSCalcPrimitiveValue final : public CSSCalcExpressionNode {
|
| float multiplier) const override {
|
| switch (m_category) {
|
| case CalcLength:
|
| - value.pixels +=
|
| - m_value->computeLength<float>(conversionData) * multiplier;
|
| + value.pixels = clampTo<float>(
|
| + value.pixels +
|
| + m_value->computeLength<double>(conversionData) * multiplier);
|
| break;
|
| case CalcPercent:
|
| ASSERT(m_value->isPercentage());
|
| - value.percent += m_value->getDoubleValue() * multiplier;
|
| + value.percent = clampTo<float>(value.percent +
|
| + m_value->getDoubleValue() * multiplier);
|
| break;
|
| case CalcNumber:
|
| // TODO(alancutter): Stop treating numbers like pixels unconditionally
|
| // in calcs to be able to accomodate border-image-width
|
| // https://drafts.csswg.org/css-backgrounds-3/#the-border-image-width
|
| - value.pixels +=
|
| - m_value->getDoubleValue() * conversionData.zoom() * multiplier;
|
| + value.pixels = clampTo<float>(value.pixels +
|
| + m_value->getDoubleValue() *
|
| + conversionData.zoom() * multiplier);
|
| break;
|
| default:
|
| ASSERT_NOT_REACHED();
|
| @@ -396,14 +399,14 @@ class CSSCalcBinaryOperation final : public CSSCalcExpressionNode {
|
| CSSPrimitiveValue::canonicalUnitTypeForCategory(
|
| leftUnitCategory);
|
| if (canonicalType != CSSPrimitiveValue::UnitType::Unknown) {
|
| - double leftValue =
|
| + double leftValue = clampTo<double>(
|
| leftSide->doubleValue() *
|
| CSSPrimitiveValue::conversionToCanonicalUnitsScaleFactor(
|
| - leftType);
|
| - double rightValue =
|
| + leftType));
|
| + double rightValue = clampTo<double>(
|
| rightSide->doubleValue() *
|
| CSSPrimitiveValue::conversionToCanonicalUnitsScaleFactor(
|
| - rightType);
|
| + rightType));
|
| return CSSCalcPrimitiveValue::create(
|
| evaluateOperator(leftValue, rightValue, op), canonicalType,
|
| isInteger);
|
| @@ -623,14 +626,14 @@ class CSSCalcBinaryOperation final : public CSSCalcExpressionNode {
|
| CalcOperator op) {
|
| switch (op) {
|
| case CalcAdd:
|
| - return leftValue + rightValue;
|
| + return clampTo<double>(leftValue + rightValue);
|
| case CalcSubtract:
|
| - return leftValue - rightValue;
|
| + return clampTo<double>(leftValue - rightValue);
|
| case CalcMultiply:
|
| - return leftValue * rightValue;
|
| + return clampTo<double>(leftValue * rightValue);
|
| case CalcDivide:
|
| if (rightValue)
|
| - return leftValue / rightValue;
|
| + return clampTo<double>(leftValue / rightValue);
|
| return std::numeric_limits<double>::quiet_NaN();
|
| }
|
| return 0;
|
|
|