egui icon indicating copy to clipboard operation
egui copied to clipboard

Context Menus demo crashes on negative width or height

Open jh05013 opened this issue 10 months ago • 2 comments

Describe the bug

In the web demo, when the plot in the Context Menus demo has negative width or height, the app crashes due to invalid arguments for f64::clamp.

To Reproduce Steps to reproduce the behavior:

  1. Open the Context Menus demo
  2. Set the width or height of the plot to a negative number by either dragging or manually inputting
  3. The app panics with panicked at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/num/f64.rs:1496:9: min > max, or either was NaN. min = 440.00000059604645, max = -440.00000059604645

Expected behavior

The width or height should be set to 0.

Desktop:

  • OS: Windows
  • Browser: Google Chrome
  • Version 124.0.6367.91 (Official Build) (64-bit)

jh05013 avatar Apr 27 '24 16:04 jh05013

Also crashes in debug mode with assertion failed: max > min from fill_marks_between

Stack trace
   3: egui_plot::fill_marks_between
             at .\crates\egui_plot\src\lib.rs:1748
   4: egui_plot::generate_marks
             at .\crates\egui_plot\src\lib.rs:1718
   5: egui_plot::log_grid_spacer::closure$0
             at .\crates\egui_plot\src\lib.rs:1416
   6: alloc::boxed::impl$49::call<tuple$<egui_plot::GridInput>,dyn$<core::ops::function::Fn<tuple$<egui_plot::GridInput>,assoc$<Output,alloc::vec::Vec<egui_plot::GridMark,alloc::alloc::Global> > > >,alloc::alloc::Global>
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\alloc\src\boxed.rs:2029
   7: egui_plot::Plot::show_dyn<tuple$<> >
             at .\crates\egui_plot\src\lib.rs:1129
   8: egui_plot::Plot::show<tuple$<>,egui_demo_lib::demo::context_menu::impl$3::example_plot::closure_env$1>
             at .\crates\egui_plot\src\lib.rs:722
   9: egui_demo_lib::demo::context_menu::ContextMenus::example_plot
             at .\crates\egui_demo_lib\src\demo\context_menu.rs:144
  10: egui_demo_lib::demo::context_menu::impl$2::ui::closure$1
             at .\crates\egui_demo_lib\src\demo\context_menu.rs:82
  11: core::ops::function::FnOnce::call_once<egui_demo_lib::demo::context_menu::impl$2::ui::closure_env$1,tuple$<ref_mut$<egui::ui::Ui> > >
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\core\src\ops\function.rs:250
  12: alloc::boxed::impl$47::call_once<tuple$<ref_mut$<egui::ui::Ui> >,dyn$<core::ops::function::FnOnce<tuple$<ref_mut$<egui::ui::Ui> >,assoc$<Output,tuple$<> > > >,alloc::alloc::Global>
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\alloc\src\boxed.rs:2015
  13: egui::ui::Ui::allocate_ui_with_layout_dyn<tuple$<> >
             at .\crates\egui\src\ui.rs:946
  14: egui::ui::Ui::horizontal_with_main_wrap_dyn<tuple$<> >
             at .\crates\egui\src\ui.rs:1981
  15: egui::ui::Ui::horizontal<tuple$<>,egui_demo_lib::demo::context_menu::impl$2::ui::closure_env$1>
             at .\crates\egui\src\ui.rs:1909
  16: egui_demo_lib::demo::context_menu::impl$2::ui
             at .\crates\egui_demo_lib\src\demo\context_menu.rs:81
  17: egui_demo_lib::demo::context_menu::impl$1::show::closure$0
             at .\crates\egui_demo_lib\src\demo\context_menu.rs:61
  18: core::ops::function::FnOnce::call_once<egui_demo_lib::demo::context_menu::impl$1::show::closure_env$0,tuple$<ref_mut$<egui::ui::Ui> > >
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\core\src\ops\function.rs:250
  19: alloc::boxed::impl$47::call_once<tuple$<ref_mut$<egui::ui::Ui> >,dyn$<core::ops::function::FnOnce<tuple$<ref_mut$<egui::ui::Ui> >,assoc$<Output,tuple$<> > > >,alloc::alloc::Global>
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\alloc\src\boxed.rs:2015
  20: egui::containers::window::impl$1::show_dyn::closure$5::closure$0<tuple$<> >
             at .\crates\egui\src\containers\window.rs:521
  21: egui::containers::resize::Resize::show<tuple$<>,egui::containers::window::impl$1::show_dyn::closure$5::closure_env$0<tuple$<> > >
             at .\crates\egui\src\containers\resize.rs:286
  22: egui::containers::window::impl$1::show_dyn::closure$5<tuple$<> >
             at .\crates\egui\src\containers\window.rs:517
  23: core::ops::function::FnOnce::call_once<egui::containers::window::impl$1::show_dyn::closure_env$5<tuple$<> >,tuple$<ref_mut$<egui::ui::Ui> > >
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\core\src\ops\function.rs:250
  24: alloc::boxed::impl$47::call_once<tuple$<ref_mut$<egui::ui::Ui> >,dyn$<core::ops::function::FnOnce<tuple$<ref_mut$<egui::ui::Ui> >,assoc$<Output,tuple$<> > > >,alloc::alloc::Global>
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\alloc\src\boxed.rs:2015
  25: egui::ui::Ui::scope_dyn<tuple$<> >
             at .\crates\egui\src\ui.rs:1791
  26: egui::ui::Ui::scope<tuple$<>,egui::containers::window::impl$1::show_dyn::closure_env$5<tuple$<> > >
             at .\crates\egui\src\ui.rs:1779
  27: egui::containers::collapsing_header::CollapsingState::show_body_unindented<tuple$<>,egui::containers::window::impl$1::show_dyn::closure_env$5<tuple$<> > >
             at .\crates\egui\src\containers\collapsing_header.rs:225
  28: egui::containers::window::Window::show_dyn<tuple$<> >
             at .\crates\egui\src\containers\window.rs:512
  29: egui::containers::window::Window::show<tuple$<>,egui_demo_lib::demo::context_menu::impl$1::show::closure_env$0>
             at .\crates\egui\src\containers\window.rs:387
  30: egui_demo_lib::demo::context_menu::impl$1::show
             at .\crates\egui_demo_lib\src\demo\context_menu.rs:57
  31: egui_demo_lib::demo::demo_app_windows::Demos::windows
             at .\crates\egui_demo_lib\src\demo\demo_app_windows.rs:88
  32: egui_demo_lib::demo::demo_app_windows::DemoWindows::show_windows
             at .\crates\egui_demo_lib\src\demo\demo_app_windows.rs:294
  33: egui_demo_lib::demo::demo_app_windows::DemoWindows::desktop_ui
             at .\crates\egui_demo_lib\src\demo\demo_app_windows.rs:288
  34: egui_demo_lib::demo::demo_app_windows::DemoWindows::ui
             at .\crates\egui_demo_lib\src\demo\demo_app_windows.rs:191
  35: egui_demo_app::wrap_app::impl$1::update
             at .\crates\egui_demo_app\src\wrap_app.rs:31
  36: egui_demo_app::wrap_app::WrapApp::show_selected_app
             at .\crates\egui_demo_app\src\wrap_app.rs:379
  37: egui_demo_app::wrap_app::impl$9::update
             at .\crates\egui_demo_app\src\wrap_app.rs:293
  38: eframe::native::epi_integration::impl$0::update::closure$0
             at .\crates\eframe\src\native\epi_integration.rs:302
  39: egui::context::Context::run<eframe::native::epi_integration::impl$0::update::closure_env$0>
             at .\crates\egui\src\context.rs:748
  40: eframe::native::epi_integration::EpiIntegration::update
             at .\crates\eframe\src\native\epi_integration.rs:295
  41: eframe::native::glow_integration::GlowWinitRunning::run_ui_and_paint
             at .\crates\eframe\src\native\glow_integration.rs:625
  42: eframe::native::glow_integration::impl$1::run_ui_and_paint
             at .\crates\eframe\src\native\glow_integration.rs:414
  43: eframe::native::run::run_and_return::closure$0<eframe::native::glow_integration::GlowWinitApp>
             at .\crates\eframe\src\native\run.rs:99
  44: winit::platform_impl::platform::event_loop::impl$3::run_on_demand::closure$0<enum2$<eframe::native::winit_integration::UserEvent>,eframe::native::run::run_and_return::closure_env$0<eframe::native::glow_integration::GlowWinitApp> >
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:236
  45: alloc::boxed::impl$48::call_mut<tuple$<enum2$<winit::event::Event<enum2$<eframe::native::winit_integration::UserEvent> > > >,dyn$<core::ops::function::FnMut<tuple$<enum2$<winit::event::Event<enum2$<eframe::native::winit_integration::UserEvent> > > >,assoc
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\alloc\src\boxed.rs:2022
  46: winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure$0<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop\runner.rs:250
  47: core::panic::unwind_safe::impl$23::call_once<tuple$<>,winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<eframe::native::winit_integration::UserEvent> > >
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\core\src\panic\unwind_safe.rs:272
  48: std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<eframe::native::winit_integration::UserEvent> > >,tuple$<> >
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\std\src\panicking.rs:552
  49: std::panicking::try<tuple$<>,core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure_env$0<enum2$<eframe::native::winit_integration::UserEvent> > > >
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\std\src\panicking.rs:516
  50: std::panic::catch_unwind
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\std\src\panic.rs:142
  51: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<eframe::native::winit_integration::UserEvent> >::catch_unwind<enum2$<eframe::native::winit_integration::UserEvent>,tuple$<>,winit::platform_impl::platform::event_loop::runner::impl
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop\runner.rs:183
  52: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<eframe::native::winit_integration::UserEvent> >::call_event_handler
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop\runner.rs:246
  53: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<eframe::native::winit_integration::UserEvent> >::send_event<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop\runner.rs:224
  54: winit::platform_impl::platform::event_loop::WindowData<enum2$<eframe::native::winit_integration::UserEvent> >::send_event<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:112
  55: winit::platform_impl::platform::event_loop::public_window_callback_inner::closure$4<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:1145
  56: core::ops::function::FnOnce::call_once<winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$4<enum2$<eframe::native::winit_integration::UserEvent> >,tuple$<> >
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\core\src\ops\function.rs:250
  57: core::panic::unwind_safe::impl$23::call_once<tuple$<>,winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$4<enum2$<eframe::native::winit_integration::UserEvent> > >
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\core\src\panic\unwind_safe.rs:272
  58: std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$4<enum2$<eframe::native::winit_integration::UserEvent> > >,tuple$<> >
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\std\src\panicking.rs:552
  59: std::panicking::try<tuple$<>,core::panic::unwind_safe::AssertUnwindSafe<winit::platform_impl::platform::event_loop::public_window_callback_inner::closure_env$4<enum2$<eframe::native::winit_integration::UserEvent> > > >
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\std\src\panicking.rs:516
  60: std::panic::catch_unwind
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\std\src\panic.rs:142
  61: winit::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<eframe::native::winit_integration::UserEvent> >::catch_unwind<enum2$<eframe::native::winit_integration::UserEvent>,tuple$<>,winit::platform_impl::platform::event_loop::public_windo
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop\runner.rs:183
  62: winit::platform_impl::platform::event_loop::public_window_callback_inner<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:2286
  63: winit::platform_impl::platform::event_loop::public_window_callback<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:984
  64: CallWindowProcW
  65: CallWindowProcW
  66: glPushClientAttrib
  67: CallWindowProcW
  68: DispatchMessageW
  69: SendMessageTimeoutW
  70: KiUserCallbackDispatcher
  71: NtUserDispatchMessage
  72: DispatchMessageW
  73: winit::platform_impl::platform::event_loop::EventLoop<enum2$<eframe::native::winit_integration::UserEvent> >::dispatch_peeked_messages<enum2$<eframe::native::winit_integration::UserEvent> >
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:449
  74: winit::platform_impl::platform::event_loop::EventLoop<enum2$<eframe::native::winit_integration::UserEvent> >::run_on_demand<enum2$<eframe::native::winit_integration::UserEvent>,eframe::native::run::run_and_return::closure_env$0<eframe::native::glow_integr
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform_impl\windows\event_loop.rs:247
  75: winit::platform::run_on_demand::impl$0::run_on_demand<enum2$<eframe::native::winit_integration::UserEvent>,eframe::native::run::run_and_return::closure_env$0<eframe::native::glow_integration::GlowWinitApp> >
             at C:\Users\jh050\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winit-0.29.10\src\platform\run_on_demand.rs:80
  76: eframe::native::run::run_and_return<eframe::native::glow_integration::GlowWinitApp>
             at .\crates\eframe\src\native\run.rs:76
  77: eframe::native::run::run_glow::closure$0
             at .\crates\eframe\src\native\run.rs:402
  78: eframe::native::run::with_event_loop::closure$0<enum2$<core::result::Result<tuple$<>,enum2$<eframe::Error> > >,eframe::native::run::run_glow::closure_env$0>
             at .\crates\eframe\src\native\run.rs:58
  79: std::thread::local::LocalKey<core::cell::RefCell<enum2$<core::option::Option<winit::event_loop::EventLoop<enum2$<eframe::native::winit_integration::UserEvent> > > > > >::try_with<core::cell::RefCell<enum2$<core::option::Option<winit::event_loop::EventLoop
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\std\src\thread\local.rs:270
  80: std::thread::local::LocalKey<core::cell::RefCell<enum2$<core::option::Option<winit::event_loop::EventLoop<enum2$<eframe::native::winit_integration::UserEvent> > > > > >::with<core::cell::RefCell<enum2$<core::option::Option<winit::event_loop::EventLoop<enu
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce\library\std\src\thread\local.rs:246
  81: eframe::native::run::with_event_loop<enum2$<core::result::Result<tuple$<>,enum2$<eframe::Error> > >,eframe::native::run::run_glow::closure_env$0>
             at .\crates\eframe\src\native\run.rs:48
  82: eframe::native::run::run_glow
             at .\crates\eframe\src\native\run.rs:400
  83: eframe::run_native
             at .\crates\eframe\src\lib.rs:262
  84: egui_demo_app::main
             at .\crates\egui_demo_app\src\main.rs:48
  85: core::ops::function::FnOnce::call_once<enum2$<core::result::Result<tuple$<>,enum2$<eframe::Error> > > (*)(),tuple$<> >

jh05013 avatar Apr 28 '24 05:04 jh05013

I am experiencing a possibly related issue that I can reproduce 100% of the time running the demo app:

  1. Launch demo app
  2. Open and close the backend panel repeatedly (sometimes it doesn't trigger on the first close)
  3. Assertion in the code below is triggered

If the assertion is disabled the next one to be triggered is egui_assert!(!frame_rect.is_negative());

This does not happen on tag https://github.com/emilk/egui/releases/tag/0.27.2

If unrelated I will open a dedicated issue about this. Hope this provides additional context though, if related.

Finished dev [unoptimized + debuginfo] target(s) in 0.14s
     Running `target/debug/egui_demo_app`
thread 'main' panicked at crates/egui/src/layout.rs:600:9:
assertion failed: child_size.x >= 0.0 && child_size.y >= 0.0
stack backtrace:
   0: rust_begin_unwind
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:645:5
   1: core::panicking::panic_fmt
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panicking.rs:72:14
   2: core::panicking::panic
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panicking.rs:144:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Process finished with exit code 134 (interrupted by signal 6:SIGABRT)

voidburn avatar May 07 '24 12:05 voidburn