Skip to content

Commit 035add9

Browse files
committed
Fix stack smashing when Godot methods return char32_t, char16_t or wchar_t
1 parent f08e781 commit 035add9

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
@@ -55,10 +55,10 @@ O *_call_native_mb_ret_obj(const GDExtensionMethodBindPtr mb, void *instance, co
5555

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

6464
template <typename... Args>
@@ -69,10 +69,10 @@ void _call_native_mb_no_ret(const GDExtensionMethodBindPtr mb, void *instance, c
6969

7070
template <typename R, typename... Args>
7171
R _call_utility_ret(GDExtensionPtrUtilityFunction func, const Args &...args) {
72-
R ret;
72+
typename PtrToArg<R>::EncodeT ret;
7373
std::array<GDExtensionConstTypePtr, sizeof...(Args)> mb_args = { { (GDExtensionConstTypePtr)args... } };
7474
func(&ret, mb_args.data(), mb_args.size());
75-
return ret;
75+
return static_cast<R>(ret);
7676
}
7777

7878
template <typename... Args>

include/godot_cpp/core/method_ptrcall.hpp

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

0 commit comments

Comments
 (0)