From 2e3953399a2bb34f62220ff813cc733a79502047 Mon Sep 17 00:00:00 2001 From: Martok Date: Wed, 22 Jan 2025 00:02:37 +0100 Subject: [PATCH] Issue #1765 - Follow-Up: For parsing calc() in non-hue component of hsl/a(), explicitly expect values --- layout/style/nsCSSParser.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/layout/style/nsCSSParser.cpp b/layout/style/nsCSSParser.cpp index c467525c29..dd6f0f4a3d 100644 --- a/layout/style/nsCSSParser.cpp +++ b/layout/style/nsCSSParser.cpp @@ -143,8 +143,7 @@ struct ReduceNumberCalcOps : public mozilla::css::BasicFloatCalcOps, { result_type ComputeLeafValue(const nsCSSValue& aValue) { - // FIXME: Restore this assertion once ParseColor no longer uses this class. - //MOZ_ASSERT(aValue.GetUnit() == eCSSUnit_Number, "unexpected unit"); + MOZ_ASSERT(aValue.GetUnit() == eCSSUnit_Number, "unexpected unit"); return aValue.GetFloatValue(); } @@ -154,6 +153,17 @@ struct ReduceNumberCalcOps : public mozilla::css::BasicFloatCalcOps, } }; +// Same as above, but reduces leaves as . You normally don't want to use this. +// Only useful in parsing percentage saturation and lightness values by ParseColorComponent. +struct ReducePercentageCalcOps : ReduceNumberCalcOps +{ + result_type ComputeLeafValue(const nsCSSValue& aValue) + { + MOZ_ASSERT(aValue.GetUnit() == eCSSUnit_Percent, "unexpected unit"); + return aValue.GetPercentValue(); + } +}; + static_assert(css::eAuthorSheetFeatures == 0 && css::eUserSheetFeatures == 1 && css::eAgentSheetFeatures == 2, @@ -7324,7 +7334,7 @@ CSSParserImpl::ParseColorComponent(float& aComponent, Maybe aSeparator) if (!ParseCalc(aValue, VARIANT_LPN | VARIANT_CALC)) { return false; } - ReduceNumberCalcOps ops; + ReducePercentageCalcOps ops; value = mozilla::css::ComputeCalc(aValue, ops); } else { REPORT_UNEXPECTED_TOKEN(PEExpectedPercent);