Parcourir la source

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 il y a 3 ans
Parent
commit
7afd215e95
1 fichiers modifiés avec 1 ajouts et 1 suppressions
  1. 1 1
      Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator.cpp

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

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