godotengine / godot-cpp

C++ bindings for the Godot script API
MIT License
1.75k stars 578 forks source link

add_virtual_method with parameter crashes engine when loading editor #1580

Closed hakuhan closed 2 weeks ago

hakuhan commented 2 months ago

Godot version

4.3

godot-cpp version

4.3

System information

Windows 11

Issue description

When I regist a method with a parameter to be virtual for godot. Editor crashed when launching. I think it is caused by empty arguments_metadata in created MethodInfo. I tried to add vector size checking code in class_db.cpp. And crash dosen't appear. image

Steps to reproduce

  1. Regist a virtual method by calling: ClassDB::add_virtual_method("TestClass", MethodInfo(Variant::Type::BOOL, "func_with_parameter", PropertyInfo(Variant::STRING_NAME, "param_name", PROPERTY_HINT_NONE, "StringName", PROPERTY_USAGE_NONE)), {"param_name"});
  2. Build GDExtension.
  3. Launch game with VSCode or other IDEs.

Minimal reproduction project

Please try with steps thanks!

dsnopek commented 2 months ago

Thanks!

It'd probably be good to add a check like you show above, but you shouldn't be directly calling ClassDB::add_virtual_method() anyway.

Instead, use the GDVIRTUAL*() and GDVIRTUAL_BIND() macros. They'll take care of all the necessary setup. You can see an example of them in the test code in test/src/example.h and test/src/example.cpp.