egui
egui copied to clipboard
Context Menus demo crashes on negative width or height
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:
- Open the Context Menus demo
- Set the width or height of the plot to a negative number by either dragging or manually inputting
- 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)
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$<> >
I am experiencing a possibly related issue that I can reproduce 100% of the time running the demo app:
- Launch demo app
- Open and close the
backend
panel repeatedly (sometimes it doesn't trigger on the first close) - 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)