Issue #1765 - Follow-Up: For parsing calc() in non-hue component of hsl/a(), explicitly expect <percentage> values

This commit is contained in:
Martok 2025-01-22 00:02:37 +01:00 committed by roytam1
commit 2e3953399a

View file

@ -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 <percentage>. 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<char> 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);