crabnebula-dev / drag-rs

Draggable for GUI apps
https://crabnebula.dev
Apache License 2.0
48 stars 9 forks source link

Paths containing forward slashes causes plugin to panic on Windows #10

Closed jamesWalker55 closed 6 months ago

jamesWalker55 commented 7 months ago

On Windows, when a path containing forward slashes is passed as the items to drag, it causes tauri to crash.

Minimal example: Edit the tauri-app example as follows:

diff --git a/examples/tauri/index.html b/examples/tauri/index.html
index bbf2553..978ca18 100644
--- a/examples/tauri/index.html
+++ b/examples/tauri/index.html
@@ -27,10 +27,11 @@
     document.getElementById('drag').ondragstart = async (event) => {
       event.preventDefault();

-      const path = await window.__TAURI__.path.resolveResource('../icon.png')
+      let path = await window.__TAURI__.path.resolveResource('../icon.png')
+      path = path.replaceAll("\\", "/");
       window.__TAURI__.drag.startDrag({ item: [path], icon: path });
     };
   </script>
 </body>

 </html>

Alternatively, replace path with a static string with forward slashes like:

const path = "C:/Files/my-cool-file.png";

Both will cause Tauri to crash upon dragging.

Backtrace:

thread 'main' panicked at crates\drag\src\platform_impl\windows\mod.rs:285:60:
called `Option::unwrap()` on a `None` value
stack backtrace:
   0: std::panicking::begin_panic_handler
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962/library\std\src\panicking.rs:597
   1: core::panicking::panic_fmt
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962/library\core\src\panicking.rs:72
   2: core::panicking::panic
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962/library\core\src\panicking.rs:127
   3: enum2$<core::option::Option<windows::Windows::Win32::UI::Shell::IShellItemArray> >::unwrap<windows::Windows::Win32::UI::Shell::IShellItemArray>
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\core\src\option.rs:935
   4: drag::platform_impl::platform::get_file_data_object
             at .\crates\drag\src\platform_impl\windows\mod.rs:285
   5: drag::platform_impl::platform::start_drag<tauri::window::Window<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> > > >
             at .\crates\drag\src\platform_impl\windows\mod.rs:202
   6: tauri_plugin_drag::start_drag::async_fn$0::closure$0<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> > >
             at .\crates\tauri-plugin\src\lib.rs:49
   7: core::ops::function::FnOnce::call_once<tauri_plugin_drag::start_drag::async_fn$0::closure_env$0<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> > >,tuple$<> >
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\core\src\ops\function.rs:250
   8: alloc::boxed::impl$47::call_once<tuple$<>,dyn$<core::ops::function::FnOnce<tuple$<>,assoc$<Output,tuple$<> > >,core::marker::Send>,alloc::alloc::Global>
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\alloc\src\boxed.rs:2007
   9: tauri_runtime_wry::handle_user_message<enum2$<tauri::EventLoopMessage> >
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-runtime-wry-0.14.2\src\lib.rs:2411
  10: tauri_runtime_wry::handle_event_loop<enum2$<tauri::EventLoopMessage> >
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-runtime-wry-0.14.2\src\lib.rs:3075
  11: tauri_runtime_wry::impl$47::run::closure$0<enum2$<tauri::EventLoopMessage>,tauri::app::impl$18::run::closure_env$0<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> >,tauri::app::impl$19::run::closure_env$0<tauri_runtime_wry::Wry<enum2$<tauri::EventL
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-runtime-wry-0.14.2\src\lib.rs:2342
  12: tao::platform_impl::platform::event_loop::impl$2::run_return::closure$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tauri_runtime_wry::impl$47::run::closure_env$0<enum2$<tauri::EventLoopMessage>,tauri::app::impl$18::run::closure_
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.5\src\platform_impl\windows\event_loop.rs:234
  13: alloc::boxed::impl$48::call_mut<tuple$<enum2$<tao::event::Event<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,ref_mut$<enum2$<tao::event_loop::ControlFlow> > >,dyn$<core::ops::function::FnMut<tuple$<enum2$<tao::event::Event<enu
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\alloc\src\boxed.rs:2014
  14: tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.5\src\platform_impl\windows\event_loop\runner.rs:250
  15: core::panic::unwind_safe::impl$23::call_once<tuple$<>,tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\core\src\panic\unwind_safe.rs:271
  16: std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,tuple$<> >
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\std\src\panicking.rs:504
  17: tauri::endpoints::app::_::impl$0::deserialize::impl$0::expecting
  18: std::panicking::try<tuple$<>,core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > > >
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\std\src\panicking.rs:468
  19: std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,tuple$<> >
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\std\src\panic.rs:142
  20: tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::catch_unwind<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tuple$<>,tao::platform_impl::plat
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.5\src\platform_impl\windows\event_loop\runner.rs:156
  21: tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::call_event_handler<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.5\src\platform_impl\windows\event_loop\runner.rs:242
  22: tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::send_event<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.5\src\platform_impl\windows\event_loop\runner.rs:224
  23: tao::platform_impl::platform::event_loop::ThreadMsgTargetSubclassInput<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::send_event<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.5\src\platform_impl\windows\event_loop.rs:127
  24: tao::platform_impl::platform::event_loop::thread_event_target_callback::closure$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.5\src\platform_impl\windows\event_loop.rs:2226
  25: core::ops::function::FnOnce::call_once<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >,tuple$<> >
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\core\src\ops\function.rs:250
  26: core::panic::unwind_safe::impl$23::call_once<windows::Windows::Win32::Foundation::LRESULT,tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\core\src\panic\unwind_safe.rs:271
  27: std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,windows::Windows::Win32
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\std\src\panicking.rs:504
  28: std::panicking::try::do_catch<core::panic::unwind_safe::AssertUnwindSafe<tokio::runtime::task::harness::poll_future::closure_env$1<core::pin::Pin<alloc::boxed::Box<enum2$<tauri::hooks::impl$7::respond_async::async_block_env$0<tauri_runtime_wry::Wry<enum2$
  29: std::panicking::try<windows::Windows::Win32::Foundation::LRESULT,core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMess
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\std\src\panicking.rs:468
  30: std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,windows::Windows::Win32::Fo
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\std\src\panic.rs:142
  31: tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::catch_unwind<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,windows::Windows::Win32::Foundati
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.5\src\platform_impl\windows\event_loop\runner.rs:156
  32: tao::platform_impl::platform::event_loop::thread_event_target_callback<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.5\src\platform_impl\windows\event_loop.rs:2275
  33: DefSubclassProc
  34: DSA_Create
  35: CallWindowProcW
  36: DispatchMessageW
  37: windows::Windows::Win32::UI::WindowsAndMessaging::DispatchMessageW
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\windows-0.39.0\src\Windows\Win32\UI\WindowsAndMessaging\mod.rs:2671
  38: tao::platform_impl::platform::event_loop::EventLoop<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::run_return<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tauri_runtime_wry::impl$47::run::closure_env$0<en
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.5\src\platform_impl\windows\event_loop.rs:264
  39: tao::platform_impl::platform::event_loop::EventLoop<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::run<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tauri_runtime_wry::impl$47::run::closure_env$0<enum2$<ta
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.5\src\platform_impl\windows\event_loop.rs:218
  40: tao::event_loop::EventLoop<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::run<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tauri_runtime_wry::impl$47::run::closure_env$0<enum2$<tauri::EventLoopMessage>,ta
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tao-0.16.5\src\event_loop.rs:179
  41: tauri_runtime_wry::impl$47::run<enum2$<tauri::EventLoopMessage>,tauri::app::impl$18::run::closure_env$0<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> >,tauri::app::impl$19::run::closure_env$0<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage>
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-runtime-wry-0.14.2\src\lib.rs:2314
  42: tauri::app::App<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> > >::run<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> >,tauri::app::impl$19::run::closure_env$0<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> >,tauri_utils::assets::
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-1.5.3\src\app.rs:868
  43: tauri::app::Builder<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> > >::run<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> >,tauri_utils::assets::EmbeddedAssets>
             at C:\Users\James\.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-1.5.3\src\app.rs:1722
  44: tauri_app::main
             at .\examples\tauri\src\main.rs:2
  45: core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
             at /rustc/79e9716c980570bfd1f666e3b16ac583f0168962\library\core\src\ops\function.rs:250
denjell-crabnebula commented 7 months ago

Thanks for the heads up!