Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Context Menus demo crashes on negative width or height #4425

Closed
jh05013 opened this issue Apr 27, 2024 · 2 comments · Fixed by #4429
Closed

Context Menus demo crashes on negative width or height #4425

jh05013 opened this issue Apr 27, 2024 · 2 comments · Fixed by #4429
Labels
bug Something is broken

Comments

@jh05013
Copy link

jh05013 commented Apr 27, 2024

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 jh05013 added the bug Something is broken label Apr 27, 2024
@jh05013
Copy link
Author

jh05013 commented Apr 28, 2024

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$<> >

@voidburn
Copy link

voidburn commented May 7, 2024

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)

emilk pushed a commit that referenced this issue May 11, 2024
* Closes #4425 

Fix: in Plot, Minimum values for screen protection.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something is broken
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants