dimforge / rapier

2D and 3D physics engines focused on performance.
https://rapier.rs
Apache License 2.0
3.77k stars 235 forks source link

panic_bounds_check when solving spring joint #602

Closed MaxBittker closed 3 months ago

MaxBittker commented 3 months ago

I reproduced this by editing examples2d/joints2.rs to use springs instead of revolute joints.

let joint: SpringJointBuilder = SpringJointBuilder::new(0.0, 0.1, 0.1).local_anchor2(point![0.0, 0.0]);

it panics inside of JointTwoBodyConstraint::solve: https://github.com/dimforge/rapier/blob/master/src/dynamics/solver/joint_constraint/joint_velocity_constraint.rs#L335

and self.solver_vel1[0] is equal to 18446744073709551615 (usize::max )

I've tried to investigate when this value becomes wrong but I can't figure it out so far!

Originally found here:https://github.com/dimforge/rapier.js/issues/268 but I found it also occurs in the native version.

thread 'main' panicked at crates/rapier2d/../../src/dynamics/solver/joint_constraint/joint_velocity_constraint.rs:342:31:
index out of bounds: the len is 3 but the index is 18446744073709551615
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_bounds_check
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panicking.rs:208:5
   3: rapier2d::dynamics::solver::joint_constraint::joint_velocity_constraint::JointTwoBodyConstraint<f32,1_usize>::solve
             at /Users/max/repos/rapier/crates/rapier2d/../../src/dynamics/solver/joint_constraint/joint_velocity_constraint.rs:342:31
   4: rapier2d::dynamics::solver::joint_constraint::any_joint_constraint::<impl rapier2d::dynamics::solver::solver_constraints_set::AnyConstraintMut<rapier2d::dynamics::solver::joint_constraint::any_joint_constraint::JointConstraintTypes>>::solve
             at /Users/max/repos/rapier/crates/rapier2d/../../src/dynamics/solver/joint_constraint/any_joint_constraint.rs:58:25
   5: rapier2d::dynamics::solver::joint_constraint::joint_constraints_set::<impl rapier2d::dynamics::solver::solver_constraints_set::SolverConstraintsSet<rapier2d::dynamics::solver::joint_constraint::any_joint_constraint::JointConstraintTypes>>::solve
             at /Users/max/repos/rapier/crates/rapier2d/../../src/dynamics/solver/joint_constraint/joint_constraints_set.rs:374:13
   6: rapier2d::dynamics::solver::velocity_solver::VelocitySolver::solve_constraints
             at /Users/max/repos/rapier/crates/rapier2d/../../src/dynamics/solver/velocity_solver.rs:187:17
   7: rapier2d::dynamics::solver::island_solver::IslandSolver::init_and_solve
             at /Users/max/repos/rapier/crates/rapier2d/../../src/dynamics/solver/island_solver.rs:81:9
   8: rapier2d::pipeline::physics_pipeline::PhysicsPipeline::build_islands_and_solve_velocity_constraints
             at /Users/max/repos/rapier/crates/rapier2d/../../src/pipeline/physics_pipeline.rs:230:17
   9: rapier2d::pipeline::physics_pipeline::PhysicsPipeline::step
             at /Users/max/repos/rapier/crates/rapier2d/../../src/pipeline/physics_pipeline.rs:567:13
  10: rapier_testbed2d::harness::Harness::step_with_graphics
             at /Users/max/repos/rapier/crates/rapier_testbed2d/../../src_testbed/harness/mod.rs:234:9
  11: rapier_testbed2d::testbed::update_testbed
             at /Users/max/repos/rapier/crates/rapier_testbed2d/../../src_testbed/testbed.rs:1379:17
  12: core::ops::function::FnMut::call_mut
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:166:5
  13: core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:294:13
  14: <Func as bevy_ecs::system::function_system::SystemParamFunction<fn(F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13) .> Out>>::run::call_inner
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/system/function_system.rs:642:21
  15: <Func as bevy_ecs::system::function_system::SystemParamFunction<fn(F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13) .> Out>>::run
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/system/function_system.rs:645:17
  16: <bevy_ecs::system::function_system::FunctionSystem<Marker,F> as bevy_ecs::system::system::System>::run_unsafe
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/system/function_system.rs:485:19
  17: bevy_ecs::system::system::System::run
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/system/system.rs:70:18
  18: <bevy_ecs::schedule::executor::single_threaded::SingleThreadedExecutor as bevy_ecs::schedule::executor::SystemExecutor>::run::{{closure}}
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/schedule/executor/single_threaded.rs:92:21
  19: core::ops::function::FnOnce::call_once
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:250:5
  20: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panic/unwind_safe.rs:272:9
  21: std::panicking::try::do_call
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:552:40
  22: std::panicking::try
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:516:19
  23: std::panic::catch_unwind
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panic.rs:142:14
  24: <bevy_ecs::schedule::executor::single_threaded::SingleThreadedExecutor as bevy_ecs::schedule::executor::SystemExecutor>::run
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/schedule/executor/single_threaded.rs:91:27
  25: bevy_ecs::world::World::try_run_schedule::{{closure}}
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/world/mod.rs:2074:55
  26: bevy_ecs::world::World::try_schedule_scope
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/world/mod.rs:2007:21
  27: bevy_ecs::world::World::try_run_schedule
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/world/mod.rs:2074:9
  28: bevy_app::main_schedule::Main::run_main::{{closure}}
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_app-0.12.1/src/main_schedule.rs:152:25
  29: bevy_ecs::world::World::resource_scope
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/world/mod.rs:1571:22
  30: bevy_app::main_schedule::Main::run_main
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_app-0.12.1/src/main_schedule.rs:150:9
  31: core::ops::function::FnMut::call_mut
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:166:5
  32: core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:294:13
  33: <Func as bevy_ecs::system::exclusive_function_system::ExclusiveSystemParamFunction<fn(F0) .> Out>>::run::call_inner
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/system/exclusive_function_system.rs:207:21
  34: <Func as bevy_ecs::system::exclusive_function_system::ExclusiveSystemParamFunction<fn(F0) .> Out>>::run
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/system/exclusive_function_system.rs:210:17
  35: <bevy_ecs::system::exclusive_function_system::ExclusiveFunctionSystem<Marker,F> as bevy_ecs::system::system::System>::run
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/system/exclusive_function_system.rs:107:19
  36: <bevy_ecs::schedule::executor::single_threaded::SingleThreadedExecutor as bevy_ecs::schedule::executor::SystemExecutor>::run::{{closure}}
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/schedule/executor/single_threaded.rs:92:21
  37: core::ops::function::FnOnce::call_once
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:250:5
  38: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panic/unwind_safe.rs:272:9
  39: std::panicking::try::do_call
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:552:40
  40: std::panicking::try
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:516:19
  41: std::panic::catch_unwind
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panic.rs:142:14
  42: <bevy_ecs::schedule::executor::single_threaded::SingleThreadedExecutor as bevy_ecs::schedule::executor::SystemExecutor>::run
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/schedule/executor/single_threaded.rs:91:27
  43: bevy_ecs::world::World::run_schedule::{{closure}}
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/world/mod.rs:2088:51
  44: bevy_ecs::world::World::try_schedule_scope
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/world/mod.rs:2007:21
  45: bevy_ecs::world::World::schedule_scope
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/world/mod.rs:2059:9
  46: bevy_ecs::world::World::run_schedule
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_ecs-0.12.1/src/world/mod.rs:2088:9
  47: bevy_app::app::App::update
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_app-0.12.1/src/app.rs:266:13
  48: bevy_winit::winit_runner::{{closure}}
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_winit-0.12.1/src/lib.rs:836:25
  49: <winit::platform_impl::platform::app_state::EventLoopHandler<T> as winit::platform_impl::platform::app_state::EventHandler>::handle_nonuser_event::{{closure}}
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/app_state.rs:96:17
  50: winit::platform_impl::platform::app_state::EventLoopHandler<T>::with_callback
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/app_state.rs:70:13
  51: <winit::platform_impl::platform::app_state::EventLoopHandler<T> as winit::platform_impl::platform::app_state::EventHandler>::handle_nonuser_event
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/app_state.rs:91:9
  52: winit::platform_impl::platform::app_state::Handler::handle_nonuser_event
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/app_state.rs:199:21
  53: winit::platform_impl::platform::app_state::AppState::cleared
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/app_state.rs:386:9
  54: winit::platform_impl::platform::observer::control_flow_end_handler::{{closure}}
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/observer.rs:79:21
  55: winit::platform_impl::platform::observer::control_flow_handler::{{closure}}
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/observer.rs:41:9
  56: std::panicking::try::do_call
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:552:40
  57: std::panicking::try
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:516:19
  58: std::panic::catch_unwind
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panic.rs:142:14
  59: winit::platform_impl::platform::event_loop::stop_app_on_panic
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/event_loop.rs:245:11
  60: winit::platform_impl::platform::observer::control_flow_handler
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/observer.rs:39:5
  61: winit::platform_impl::platform::observer::control_flow_end_handler
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/observer.rs:74:9
  62: <unknown>
  63: <unknown>
  64: <unknown>
  65: <unknown>
  66: <unknown>
  67: <unknown>
  68: <unknown>
  69: <unknown>
  70: <unknown>
  71: <unknown>
  72: winit::platform_impl::platform::event_loop::EventLoop<T>::run_return::{{closure}}
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/event_loop.rs:220:22
  73: objc2::rc::autorelease::autoreleasepool
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.3.0-beta.3.patch-leaks.3/src/rc/autorelease.rs:313:5
  74: winit::platform_impl::platform::event_loop::EventLoop<T>::run_return
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/event_loop.rs:211:25
  75: winit::platform_impl::platform::event_loop::EventLoop<T>::run
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/platform_impl/macos/event_loop.rs:190:25
  76: winit::event_loop::EventLoop<T>::run
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.28.7/src/event_loop.rs:305:9
  77: bevy_winit::run
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_winit-0.12.1/src/lib.rs:235:5
  78: bevy_winit::winit_runner
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_winit-0.12.1/src/lib.rs:920:9
  79: core::ops::function::FnOnce::call_once
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:250:5
  80: core::ops::function::FnOnce::call_once{{vtable.shim}}
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:250:5
  81: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/alloc/src/boxed.rs:2015:9
  82: bevy_app::app::App::run
             at /Users/max/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_app-0.12.1/src/app.rs:314:9
  83: rapier_testbed2d::testbed::TestbedApp::run_with_init
             at /Users/max/repos/rapier/crates/rapier_testbed2d/../../src_testbed/testbed.rs:423:13
  84: all_examples2::main
             at ./all_examples2.rs:100:5
  85: core::ops::function::FnOnce::call_once
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
Encountered a panic in system `rapier_testbed2d::testbed::update_testbed`!
Encountered a panic in system `bevy_app::main_schedule::Main::run_main`!
sebcrozet commented 3 months ago

Good catch. Looks like I didn’t wire up the spring constraint when attached to two dynamic bodies.

MaxBittker commented 3 months ago

Yippee! Thanks for the fix and the excellent engine

On Sat, Mar 23, 2024 at 5:34 AM Sébastien Crozet @.***> wrote:

Closed #602 https://github.com/dimforge/rapier/issues/602 as completed via #603 https://github.com/dimforge/rapier/pull/603.

— Reply to this email directly, view it on GitHub https://github.com/dimforge/rapier/issues/602#event-12224006630, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABNEHGSRZKUZQH2OHWTLE5DYZVEB7AVCNFSM6AAAAABFAL74B6VHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJSGIZDIMBQGY3DGMA . You are receiving this because you authored the thread.Message ID: @.***>