From 4d4291548531e7ceaa734b0a782a891b8a85fbd4 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Wed, 10 Nov 2021 13:48:41 +0000 Subject: [PATCH] LibWeb: Ensure that CSS initial values are always valid :^) First off, this verifies that an initial value is always provided in Properties.json for each property. Second, it verifies that parsing that initial value succeeds. This means that a call to `property_initial_value()` will always return a valid StyleValue. :^) --- .../LibWeb/Generate_CSS_PropertyID_cpp.cpp | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_PropertyID_cpp.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_PropertyID_cpp.cpp index 9b4b769593..24c7ea9b94 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_PropertyID_cpp.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_PropertyID_cpp.cpp @@ -182,19 +182,24 @@ RefPtr property_initial_value(PropertyID property_id) // works for now! :^) auto output_initial_value_code = [&](auto& name, auto& object) { - if (object.has("initial")) { - auto& initial_value = object.get("initial"); - VERIFY(initial_value.is_string()); - auto initial_value_string = initial_value.as_string(); - - auto member_generator = generator.fork(); - member_generator.set("name:titlecase", title_casify(name)); - member_generator.set("initial_value_string", initial_value_string); - member_generator.append(R"~~~( - if (auto parsed_value = Parser(parsing_context, "@initial_value_string@").parse_as_css_value(PropertyID::@name:titlecase@)) - initial_values.set(PropertyID::@name:titlecase@, parsed_value.release_nonnull()); -)~~~"); + if (!object.has("initial")) { + dbgln("No initial value specified for property '{}'", name); + VERIFY_NOT_REACHED(); } + auto& initial_value = object.get("initial"); + VERIFY(initial_value.is_string()); + auto initial_value_string = initial_value.as_string(); + + auto member_generator = generator.fork(); + member_generator.set("name:titlecase", title_casify(name)); + member_generator.set("initial_value_string", initial_value_string); + member_generator.append(R"~~~( + { + auto parsed_value = Parser(parsing_context, "@initial_value_string@").parse_as_css_value(PropertyID::@name:titlecase@); + VERIFY(!parsed_value.is_null()); + initial_values.set(PropertyID::@name:titlecase@, parsed_value.release_nonnull()); + } +)~~~"); }; properties.for_each_member([&](auto& name, auto& value) {