TechnikTobi / little_exif

A little library for reading and writing EXIF data in pure Rust.
Apache License 2.0
18 stars 4 forks source link

Panic at writing exif #9

Open FaultierSP opened 1 week ago

FaultierSP commented 1 week ago

Hi, I encountered a problem.

I'm writing a Tauri app.

This is my code: let mut metadata = Metadata::new_from_path(image_path).map_err(|e| e.to_string())?;

Kinda basic, but my app crashes as soon as it touches the line.

Here is the error and the backtrace:

thread 'main' panicked at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/little_exif-0.3.2/src/metadata.rs:504:40:
range end index 992 out of range for slice of length 984
stack backtrace:
   0: rust_begin_unwind
             at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/std/src/panicking.rs:652:5
   1: core::panicking::panic_fmt
             at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/panicking.rs:72:14
   2: core::slice::index::slice_end_index_len_fail_rt
             at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/slice/index.rs:66:5
   3: core::slice::index::slice_end_index_len_fail
             at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/slice/index.rs:59:5
   4: <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index
             at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/slice/index.rs:405:13
   5: core::slice::index::<impl core::ops::index::Index<I> for [T]>::index
             at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/slice/index.rs:18:9
   6: <alloc::vec::Vec<T,A> as core::ops::index::Index<I>>::index
             at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/alloc/src/vec/mod.rs:2907:9
   7: little_exif::metadata::Metadata::decode_ifd
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/little_exif-0.3.2/src/metadata.rs:504:28
   8: little_exif::metadata::Metadata::decode_ifd
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/little_exif-0.3.2/src/metadata.rs:520:33
   9: little_exif::metadata::Metadata::decode_metadata_general
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/little_exif-0.3.2/src/metadata.rs:428:37
  10: little_exif::metadata::Metadata::new_from_path
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/little_exif-0.3.2/src/metadata.rs:104:26
  11: myapiclient::download_image
             at ./src/main.rs:74:24
  12: myapiclient::main::{{closure}}
             at ./src/main.rs:90:25
  13: <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call
             at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/alloc/src/boxed.rs:2036:9
  14: tauri::manager::WindowManager<R>::run_invoke_handler
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tauri-1.6.8/src/manager.rs:952:5
  15: tauri::window::Window<R>::on_message
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tauri-1.6.8/src/window.rs:1649:7
  16: tauri::manager::WindowManager<R>::prepare_ipc_handler::{{closure}}
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tauri-1.6.8/src/manager.rs:633:19
  17: <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call
             at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/alloc/src/boxed.rs:2036:9
  18: tauri_runtime_wry::create_ipc_handler::{{closure}}
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tauri-runtime-wry-0.14.8/src/lib.rs:3406:5
  19: <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call
             at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/alloc/src/boxed.rs:2036:9
  20: <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call
             at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/alloc/src/boxed.rs:2036:9
  21: wry::webview::webkitgtk::InnerWebView::new::{{closure}}
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/wry-0.24.10/src/webview/webkitgtk/mod.rs:97:11
  22: <O as webkit2gtk::auto::user_content_manager::UserContentManagerExt>::connect_script_message_received::script_message_received_trampoline
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/webkit2gtk-0.18.2/src/auto/user_content_manager.rs:299:7
  23: g_closure_invoke
  24: <unknown>
  25: g_signal_emit_valist
  26: g_signal_emit
  27: <unknown>
  28: <unknown>
  29: <unknown>
  30: <unknown>
  31: <unknown>
  32: <unknown>
  33: <unknown>
  34: <unknown>
  35: <unknown>
  36: <unknown>
  37: <unknown>
  38: g_main_context_dispatch
  39: <unknown>
  40: g_main_context_iteration
  41: gtk_main_iteration_do
  42: gtk::auto::functions::main_iteration_do
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/gtk-0.15.5/src/auto/functions.rs:405:24
  43: tao::platform_impl::platform::event_loop::EventLoop<T>::run_return::{{closure}}
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tao-0.16.9/src/platform_impl/linux/event_loop.rs:1060:11
  44: glib::main_context::<impl glib::auto::main_context::MainContext>::with_thread_default
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/glib-0.15.12/src/main_context.rs:156:12
  45: tao::platform_impl::platform::event_loop::EventLoop<T>::run_return
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tao-0.16.9/src/platform_impl/linux/event_loop.rs:958:5
  46: tao::platform_impl::platform::event_loop::EventLoop<T>::run
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tao-0.16.9/src/platform_impl/linux/event_loop.rs:912:21
  47: tao::event_loop::EventLoop<T>::run
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tao-0.16.9/src/event_loop.rs:179:5
  48: <tauri_runtime_wry::Wry<T> as tauri_runtime::Runtime<T>>::run
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tauri-runtime-wry-0.14.8/src/lib.rs:2299:5
  49: tauri::app::App<R>::run
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tauri-1.6.8/src/app.rs:868:5
  50: tauri::app::Builder<R>::run
             at /home/alex/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tauri-1.6.8/src/app.rs:1727:5
  51: myapiclient::main
             at ./src/main.rs:89:5
  52: core::ops::function::FnOnce::call_once
             at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/ops/function.rs:250:5

Thanks for your time.

TechnikTobi commented 1 week ago

Do you have an image file that you can share to reproduce this? (Ideally pack it as a .zip or something so that your file sharing service of choice won't alter the image file).

FaultierSP commented 1 week ago

Sure, here ya go. It's a jpg generated by StableDiffusion.

f5a659bd-38be-45cd-8fcf-c180a47c5819

TechnikTobi commented 1 week ago

Thanks for the example image! I think I know what the problem is, but it will take a few days until I'm able to publish a fix for this.

FaultierSP commented 6 days ago

Super, danke für Deine Zeit. :)