summaryrefslogtreecommitdiffstats
path: root/include/godot_cpp
diff options
context:
space:
mode:
authorondy-personal <98788662+ondy-personal@users.noreply.github.com>2022-01-31 17:12:45 -0800
committerGitHub <noreply@github.com>2022-01-31 17:12:45 -0800
commit3d237fc7d7956bf805d005833dc1687971ee452a (patch)
treeac4dd2fa712fd799b530851eb10285e4d954ad02 /include/godot_cpp
parent4dddd0b55bc40b9e6222f5a5d25c0868b16bc86e (diff)
downloadredot-cpp-3d237fc7d7956bf805d005833dc1687971ee452a.tar.gz
Fixed crash when called methods return nullptr.
The returned value "ret" may be nullptr in which case the code would crash because "object_get_instance_binding" can't be called on nullptr input. This should be very easy to reproduce, I encountered it pretty much any time I called a method that returned Ref<Something>. E.g.: Ref<GeometryInstance3D> instance; instance.instantiate(); instance.get_mesh(); // Crash because no mesh was set for the instance and the returned value was nullptr.
Diffstat (limited to 'include/godot_cpp')
-rw-r--r--include/godot_cpp/core/engine_ptrcall.hpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/godot_cpp/core/engine_ptrcall.hpp b/include/godot_cpp/core/engine_ptrcall.hpp
index 379d002..7ed258e 100644
--- a/include/godot_cpp/core/engine_ptrcall.hpp
+++ b/include/godot_cpp/core/engine_ptrcall.hpp
@@ -48,6 +48,9 @@ O *_call_native_mb_ret_obj(const GDNativeMethodBindPtr mb, void *instance, const
GodotObject *ret = nullptr;
std::array<const GDNativeTypePtr, sizeof...(Args)> mb_args = { { (const GDNativeTypePtr)args... } };
internal::gdn_interface->object_method_bind_ptrcall(mb, instance, mb_args.data(), &ret);
+ if (ret == nullptr) {
+ return nullptr;
+ }
return reinterpret_cast<O *>(internal::gdn_interface->object_get_instance_binding(ret, internal::token, &O::___binding_callbacks));
}