summaryrefslogtreecommitdiff
path: root/engine-macros/src/reflection
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-06-11 20:29:07 +0200
committerHampusM <hampus@hampusmat.com>2026-06-11 20:29:07 +0200
commitbf82dbc8c377453ccb97c7d66f1ef4b8f8ebd6b0 (patch)
tree9418962e938e087773708a9cb30d36bb343bd14d /engine-macros/src/reflection
parentbcfb025d8996b9e2d7d7386a3e372331ad11985f (diff)
fix(engine): prevent copying uninitialized data from enum variants
Diffstat (limited to 'engine-macros/src/reflection')
-rw-r--r--engine-macros/src/reflection/enum_impl.rs5
1 files changed, 3 insertions, 2 deletions
diff --git a/engine-macros/src/reflection/enum_impl.rs b/engine-macros/src/reflection/enum_impl.rs
index d124db2..b2e01e8 100644
--- a/engine-macros/src/reflection/enum_impl.rs
+++ b/engine-macros/src/reflection/enum_impl.rs
@@ -197,7 +197,7 @@ pub fn generate(input: syn::ItemEnum) -> proc_macro2::TokenStream
}
};
- let variants = generate_variants(&input, &engine_crate_path);
+ let variants = generate_variants(&input, is_unit_only, &engine_crate_path);
quote! {
#[doc(hidden)]
@@ -241,6 +241,7 @@ pub fn generate(input: syn::ItemEnum) -> proc_macro2::TokenStream
fn generate_variants<'a>(
input: &'a syn::ItemEnum,
+ is_unit_only: bool,
engine_crate_path: &'a syn::Path,
) -> impl Iterator<Item = proc_macro2::TokenStream> + use<'a>
{
@@ -346,7 +347,7 @@ fn generate_variants<'a>(
};
let discriminant = match variant.fields {
- syn::Fields::Unit => {
+ syn::Fields::Unit if is_unit_only => {
quote! {
let mut buf = [0u8; std::mem::size_of::<i128>()];