Przeglądaj źródła

LibWeb: Initialize IDL `any` values without default value to undefined

Previously this would generate the following code:

    JS::Value foo_value;
    if (!foo.is_undefined())
        foo_value = foo;

Which is dangerous as we're passing an empty value around, which could
be exposed to user code again. This is fine with "= null", for which it
also generates:

    else
        foo_value = JS::js_null();

So, in summary: a value of type `any`, not `required`, with no default
value and no initializer from user code will now default to undefined
instead of an empty value.
Linus Groh 3 lat temu
rodzic
commit
7afd215e95

+ 1 - 1
Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator.cpp

@@ -1079,7 +1079,7 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter
 )~~~");
         } else {
             scoped_generator.append(R"~~~(
-    JS::Value @cpp_name@;
+    JS::Value @cpp_name@ = JS::js_undefined();
     if (!@js_name@@js_suffix@.is_undefined())
         @cpp_name@ = @js_name@@js_suffix@;
 )~~~");