Skip to content

Commit d8e8071

Browse files
NorbirosAtkinsSJ
authored andcommitted
LibWeb/CSS: Absolutize values while computing font variation settings
Makes the `compute_font_variation_settings` function match other `compute_font_*` by absolutizing values passed into them. It resolves a crash related to using `siblings-count` inside `font-variation-settings` Co-authored-by: Sam Atkins <sam@ladybird.org>
1 parent 3829a85 commit d8e8071

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

Libraries/LibWeb/CSS/StyleComputer.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2008,6 +2008,12 @@ void StyleComputer::compute_font(ComputedProperties& style, Optional<DOM::Abstra
20082008
PropertyID::FontStyle,
20092009
compute_font_style(font_style_specified_value, font_computation_context));
20102010

2011+
auto const& font_variation_settings_value = style.property(PropertyID::FontVariationSettings, ComputedProperties::WithAnimationsApplied::No);
2012+
2013+
style.set_property_without_modifying_flags(
2014+
PropertyID::FontVariationSettings,
2015+
compute_font_variation_settings(font_variation_settings_value, font_computation_context));
2016+
20112017
auto const& font_family = style.property(CSS::PropertyID::FontFamily);
20122018

20132019
auto font_list = compute_font_for_style_values(font_family, style.font_size(), style.font_slope(), style.font_weight(), style.font_width(), style.font_variation_settings().value_or({}), font_computation_context.length_resolution_context);
@@ -3147,7 +3153,7 @@ NonnullRefPtr<StyleValue const> StyleComputer::compute_value_of_property(
31473153
case PropertyID::CornerTopRightShape:
31483154
return compute_corner_shape(absolutized_value);
31493155
case PropertyID::FontVariationSettings:
3150-
return compute_font_variation_settings(absolutized_value);
3156+
return compute_font_variation_settings(absolutized_value, computation_context);
31513157
case PropertyID::LetterSpacing:
31523158
case PropertyID::WordSpacing:
31533159
if (absolutized_value->to_keyword() == Keyword::Normal)
@@ -3194,8 +3200,10 @@ NonnullRefPtr<StyleValue const> StyleComputer::compute_animation_name(NonnullRef
31943200
});
31953201
}
31963202

3197-
NonnullRefPtr<StyleValue const> StyleComputer::compute_font_variation_settings(NonnullRefPtr<StyleValue const> const& absolutized_value)
3203+
NonnullRefPtr<StyleValue const> StyleComputer::compute_font_variation_settings(NonnullRefPtr<StyleValue const> const& specified_value, ComputationContext const& computation_context)
31983204
{
3205+
auto const& absolutized_value = specified_value->absolutized(computation_context);
3206+
31993207
if (absolutized_value->is_keyword())
32003208
return absolutized_value;
32013209

Libraries/LibWeb/CSS/StyleComputer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ class WEB_API StyleComputer final : public GC::Cell {
207207
static NonnullRefPtr<StyleValue const> compute_font_style(NonnullRefPtr<StyleValue const> const& specified_value, ComputationContext const&);
208208
static NonnullRefPtr<StyleValue const> compute_font_weight(NonnullRefPtr<StyleValue const> const& specified_value, double inherited_font_weight, ComputationContext const&);
209209
static NonnullRefPtr<StyleValue const> compute_font_width(NonnullRefPtr<StyleValue const> const& specified_value, ComputationContext const&);
210-
static NonnullRefPtr<StyleValue const> compute_font_variation_settings(NonnullRefPtr<StyleValue const> const& absolutized_value);
210+
static NonnullRefPtr<StyleValue const> compute_font_variation_settings(NonnullRefPtr<StyleValue const> const& specified_value, ComputationContext const&);
211211
static NonnullRefPtr<StyleValue const> compute_line_height(NonnullRefPtr<StyleValue const> const& specified_value, ComputationContext const&);
212212
static NonnullRefPtr<StyleValue const> compute_opacity(NonnullRefPtr<StyleValue const> const& absolutized_value);
213213
static NonnullRefPtr<StyleValue const> compute_position_area(NonnullRefPtr<StyleValue const> const& absolutized_value);

0 commit comments

Comments
 (0)