From 1e169bb8091e18c0cf98261af9cd843602eb8175 Mon Sep 17 00:00:00 2001 From: David Snopek Date: Thu, 12 Sep 2024 09:11:00 -0500 Subject: [PATCH] Fix crash in `ClassDB::add_virtual_method()` if arguments metadata is the wrong size --- src/core/class_db.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/core/class_db.cpp b/src/core/class_db.cpp index 5ded7991..ae74f2c2 100644 --- a/src/core/class_db.cpp +++ b/src/core/class_db.cpp @@ -353,9 +353,14 @@ void ClassDB::add_virtual_method(const StringName &p_class, const MethodInfo &p_ if (mi.argument_count > 0) { mi.arguments = (GDExtensionPropertyInfo *)memalloc(sizeof(GDExtensionPropertyInfo) * 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++) { mi.arguments[i] = p_method.arguments[i]._to_gdextension(); - mi.arguments_metadata[i] = p_method.arguments_metadata[i]; + if (i < p_method.arguments_metadata.size()) { + mi.arguments_metadata[i] = p_method.arguments_metadata[i]; + } } } else { mi.arguments = nullptr;