Skip to content

Commit 8fffe3b

Browse files
committed
Fix stack smashing when Godot methods return char32_t, char16_t or wchar_t
(cherry picked from commit 035add9)
1 parent dcd0842 commit 8fffe3b

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

include/godot_cpp/core/engine_ptrcall.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ O *_call_native_mb_ret_obj(const GDExtensionMethodBindPtr mb, void *instance, co
5656

5757
template <typename R, typename... Args>
5858
R _call_native_mb_ret(const GDExtensionMethodBindPtr mb, void *instance, const Args &...args) {
59-
R ret;
59+
typename PtrToArg<R>::EncodeT ret;
6060
std::array<GDExtensionConstTypePtr, sizeof...(Args)> mb_args = { { (GDExtensionConstTypePtr)args... } };
6161
internal::gdextension_interface_object_method_bind_ptrcall(mb, instance, mb_args.data(), &ret);
62-
return ret;
62+
return static_cast<R>(ret);
6363
}
6464

6565
template <typename... Args>
@@ -70,10 +70,10 @@ void _call_native_mb_no_ret(const GDExtensionMethodBindPtr mb, void *instance, c
7070

7171
template <typename R, typename... Args>
7272
R _call_utility_ret(GDExtensionPtrUtilityFunction func, const Args &...args) {
73-
R ret;
73+
typename PtrToArg<R>::EncodeT ret;
7474
std::array<GDExtensionConstTypePtr, sizeof...(Args)> mb_args = { { (GDExtensionConstTypePtr)args... } };
7575
func(&ret, mb_args.data(), mb_args.size());
76-
return ret;
76+
return static_cast<R>(ret);
7777
}
7878

7979
template <typename... Args>

include/godot_cpp/core/method_ptrcall.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ MAKE_PTRARGCONV(uint16_t, int64_t);
122122
MAKE_PTRARGCONV(int16_t, int64_t);
123123
MAKE_PTRARGCONV(uint32_t, int64_t);
124124
MAKE_PTRARGCONV(int32_t, int64_t);
125+
MAKE_PTRARGCONV(char16_t, int64_t);
126+
MAKE_PTRARGCONV(char32_t, int64_t);
127+
MAKE_PTRARGCONV(wchar_t, int64_t);
125128
MAKE_PTRARG(int64_t);
126129
MAKE_PTRARG(uint64_t);
127130
// Float types

0 commit comments

Comments
 (0)