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.
This commit is contained in:
Linus Groh 2021-10-11 12:54:05 +01:00
parent a9a7d65099
commit 7afd215e95

View file

@ -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@;
)~~~");