mirror of
https://github.com/godotengine/godot-cpp.git
synced 2026-01-03 18:09:13 +03:00
Fix stack smashing when Godot methods return char32_t, char16_t or wchar_t
(cherry picked from commit 035add9d4f)
This commit is contained in:
@@ -55,10 +55,10 @@ O *_call_native_mb_ret_obj(const GDExtensionMethodBindPtr mb, void *instance, co
|
|||||||
|
|
||||||
template <typename R, typename... Args>
|
template <typename R, typename... Args>
|
||||||
R _call_native_mb_ret(const GDExtensionMethodBindPtr mb, void *instance, const Args &...args) {
|
R _call_native_mb_ret(const GDExtensionMethodBindPtr mb, void *instance, const Args &...args) {
|
||||||
R ret;
|
typename PtrToArg<R>::EncodeT ret;
|
||||||
std::array<GDExtensionConstTypePtr, sizeof...(Args)> mb_args = { { (GDExtensionConstTypePtr)args... } };
|
std::array<GDExtensionConstTypePtr, sizeof...(Args)> mb_args = { { (GDExtensionConstTypePtr)args... } };
|
||||||
internal::gdextension_interface_object_method_bind_ptrcall(mb, instance, mb_args.data(), &ret);
|
internal::gdextension_interface_object_method_bind_ptrcall(mb, instance, mb_args.data(), &ret);
|
||||||
return ret;
|
return static_cast<R>(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
@@ -69,10 +69,10 @@ void _call_native_mb_no_ret(const GDExtensionMethodBindPtr mb, void *instance, c
|
|||||||
|
|
||||||
template <typename R, typename... Args>
|
template <typename R, typename... Args>
|
||||||
R _call_utility_ret(GDExtensionPtrUtilityFunction func, const Args &...args) {
|
R _call_utility_ret(GDExtensionPtrUtilityFunction func, const Args &...args) {
|
||||||
R ret;
|
typename PtrToArg<R>::EncodeT ret;
|
||||||
std::array<GDExtensionConstTypePtr, sizeof...(Args)> mb_args = { { (GDExtensionConstTypePtr)args... } };
|
std::array<GDExtensionConstTypePtr, sizeof...(Args)> mb_args = { { (GDExtensionConstTypePtr)args... } };
|
||||||
func(&ret, mb_args.data(), mb_args.size());
|
func(&ret, mb_args.data(), mb_args.size());
|
||||||
return ret;
|
return static_cast<R>(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
|
|||||||
@@ -121,6 +121,9 @@ MAKE_PTRARGCONV(uint16_t, int64_t);
|
|||||||
MAKE_PTRARGCONV(int16_t, int64_t);
|
MAKE_PTRARGCONV(int16_t, int64_t);
|
||||||
MAKE_PTRARGCONV(uint32_t, int64_t);
|
MAKE_PTRARGCONV(uint32_t, int64_t);
|
||||||
MAKE_PTRARGCONV(int32_t, int64_t);
|
MAKE_PTRARGCONV(int32_t, int64_t);
|
||||||
|
MAKE_PTRARGCONV(char16_t, int64_t);
|
||||||
|
MAKE_PTRARGCONV(char32_t, int64_t);
|
||||||
|
MAKE_PTRARGCONV(wchar_t, int64_t);
|
||||||
MAKE_PTRARG(int64_t);
|
MAKE_PTRARG(int64_t);
|
||||||
MAKE_PTRARG(uint64_t);
|
MAKE_PTRARG(uint64_t);
|
||||||
// Float types
|
// Float types
|
||||||
|
|||||||
Reference in New Issue
Block a user