From 08e4c89da97fa8b708c55126bf562e6aae0d5f24 Mon Sep 17 00:00:00 2001 From: Brecht Kuppens Date: Mon, 20 Jan 2025 10:15:47 +0100 Subject: [PATCH] Fix buffer overrun with enums pointers cast to int64_t* when enum is only 32-bit (cherry picked from commit 7576dc5930123a088526cbb9abab8bc0246efa6e) --- binding_generator.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/binding_generator.py b/binding_generator.py index ab4453068..30217bd38 100644 --- a/binding_generator.py +++ b/binding_generator.py @@ -2224,6 +2224,10 @@ def get_encoded_arg(arg_name, type_name, type_meta): result.append(f"\t{get_gdextension_type(arg_type)} {name}_encoded;") result.append(f"\tPtrToArg<{correct_type(type_name)}>::encode({name}, &{name}_encoded);") name = f"&{name}_encoded" + elif is_enum(type_name) and not is_bitfield(type_name): + result.append(f"\tint64_t {name}_encoded;") + result.append(f"\tPtrToArg::encode({name}, &{name}_encoded);") + name = f"&{name}_encoded" elif is_engine_class(type_name): # `{name}` is a C++ wrapper, it contains a field which is the object's pointer Godot expects. # We have to check `nullptr` because when the caller sends `nullptr`, the wrapper itself will be null.