kitgit

tirbofish/dropbear · commit

2c8c840f755bd7d53291b9c21e2b7d99afa1e998

fix: scene load error Unverified

Thribhu K <4tkbytes@pm.me> · 2026-01-18 13:26

view full diff

diff --git a/crates/eucalyptus-core/src/scene/scripting.rs b/crates/eucalyptus-core/src/scene/scripting.rs
index bf22c06..7a91e7c 100644
--- a/crates/eucalyptus-core/src/scene/scripting.rs
+++ b/crates/eucalyptus-core/src/scene/scripting.rs
@@ -288,10 +288,11 @@ pub mod jni {
         mut env: JNIEnv,
         _: JClass,
         command_buffer_ptr: jlong,
+        scene_loader_handle: jlong,
         scene_id: jlong,
     ) {
         let command_buffer = convert_ptr!(command_buffer_ptr, CommandBufferPtr => crossbeam_channel::Sender<CommandBuffer>);
-        let scene_loader = convert_ptr!(scene_id as SceneLoaderPtr => parking_lot::Mutex<crate::scene::loading::SceneLoader>);
+        let scene_loader = convert_ptr!(scene_loader_handle, SceneLoaderPtr => parking_lot::Mutex<crate::scene::loading::SceneLoader>);
 
         if let Err(e) = super::shared::switch_to_scene_async(command_buffer, scene_loader, scene_id as u64) {
             eprintln!("Failed to switch scene async: {}", e);
diff --git a/crates/eucalyptus-core/src/utils.rs b/crates/eucalyptus-core/src/utils.rs
index 8a5e054..9a8dab0 100644
--- a/crates/eucalyptus-core/src/utils.rs
+++ b/crates/eucalyptus-core/src/utils.rs
@@ -355,6 +355,19 @@ macro_rules! convert_ptr {
             return $crate::ffi_error_return!("{}", message);
         }
 
+        let addr = ptr as usize;
+        let align = std::mem::align_of::<$target_ty>();
+        if addr % align != 0 {
+            let message = format!(
+                "[{}] [ERROR] {} pointer is misaligned: addr=0x{:x}, align=0x{:x}",
+                std::any::type_name::<$target_ty>(),
+                stringify!($ptr),
+                addr,
+                align
+            );
+            return $crate::ffi_error_return!("{}", message);
+        }
+
         unsafe { &mut *(ptr as *mut $target_ty) }
     }};
 
@@ -368,6 +381,19 @@ macro_rules! convert_ptr {
             );
             return $crate::ffi_error_return!("{}", message);
         }
+
+        let addr = ptr as usize;
+        let align = std::mem::align_of::<$target_ty>();
+        if addr % align != 0 {
+            let message = format!(

Large diffs are not rendered by default. Showing the first 50 of 131 lines. Show full diff