Fix crash in `ClassDB::add_virtual_method()` if arguments metadata is the wrong size
parent
d477589104
commit
1e169bb809
|
@ -353,10 +353,15 @@ void ClassDB::add_virtual_method(const StringName &p_class, const MethodInfo &p_
|
||||||
if (mi.argument_count > 0) {
|
if (mi.argument_count > 0) {
|
||||||
mi.arguments = (GDExtensionPropertyInfo *)memalloc(sizeof(GDExtensionPropertyInfo) * mi.argument_count);
|
mi.arguments = (GDExtensionPropertyInfo *)memalloc(sizeof(GDExtensionPropertyInfo) * mi.argument_count);
|
||||||
mi.arguments_metadata = (GDExtensionClassMethodArgumentMetadata *)memalloc(sizeof(GDExtensionClassMethodArgumentMetadata) * mi.argument_count);
|
mi.arguments_metadata = (GDExtensionClassMethodArgumentMetadata *)memalloc(sizeof(GDExtensionClassMethodArgumentMetadata) * mi.argument_count);
|
||||||
|
if (mi.argument_count != p_method.arguments_metadata.size()) {
|
||||||
|
WARN_PRINT("Mismatch argument metadata count for virtual method: " + String(p_class) + "::" + p_method.name);
|
||||||
|
}
|
||||||
for (uint32_t i = 0; i < mi.argument_count; i++) {
|
for (uint32_t i = 0; i < mi.argument_count; i++) {
|
||||||
mi.arguments[i] = p_method.arguments[i]._to_gdextension();
|
mi.arguments[i] = p_method.arguments[i]._to_gdextension();
|
||||||
|
if (i < p_method.arguments_metadata.size()) {
|
||||||
mi.arguments_metadata[i] = p_method.arguments_metadata[i];
|
mi.arguments_metadata[i] = p_method.arguments_metadata[i];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
mi.arguments = nullptr;
|
mi.arguments = nullptr;
|
||||||
mi.arguments_metadata = nullptr;
|
mi.arguments_metadata = nullptr;
|
||||||
|
|
Loading…
Reference in New Issue