zed-industries / zed

Code at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.
https://zed.dev
Other
35.32k stars 1.79k forks source link

Crash when scrolling #12011

Open huacnlee opened 2 weeks ago

huacnlee commented 2 weeks ago

Check for existing issues

Describe the bug / provide steps to reproduce it

I have found this bug while work on PR #11296, this still crash event in latest commit.

Thread "main" panicked with "point Point { row: 0, column: 1 } is inside of character '。'" at crates/rope/src/rope.rs:794:21
   0: backtrace::backtrace::libunwind::trace
             at /Users/jason/.cargo/registry/src/index.crates.io-6f17d22bba15001f/backtrace-0.3.69/src/backtrace/libunwind.rs:93:5
      backtrace::backtrace::trace_unsynchronized::<<backtrace::capture::Backtrace>::create::{closure#0}>
             at /Users/jason/.cargo/registry/src/index.crates.io-6f17d22bba15001f/backtrace-0.3.69/src/backtrace/mod.rs:66:5
   1: backtrace::backtrace::trace::<<backtrace::capture::Backtrace>::create::{closure#0}>
             at /Users/jason/.cargo/registry/src/index.crates.io-6f17d22bba15001f/backtrace-0.3.69/src/backtrace/mod.rs:53:14
   2: <backtrace::capture::Backtrace>::create
             at /Users/jason/.cargo/registry/src/index.crates.io-6f17d22bba15001f/backtrace-0.3.69/src/capture.rs:176:9
   3: <backtrace::capture::Backtrace>::new
             at /Users/jason/.cargo/registry/src/index.crates.io-6f17d22bba15001f/backtrace-0.3.69/src/capture.rs:140:22
   4: Zed::reliability::init_panic_hook::{closure#0}
             at crates/zed/src/reliability.rs:54:29
   5: <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2034:9
      std::panicking::rust_panic_with_hook
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:783:13
   6: std::panicking::begin_panic_handler::{{closure}}
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:657:13
   7: std::sys_common::backtrace::__rust_end_short_backtrace
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:171:18
   8: rust_begin_unwind
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:645:5
   9: core::panicking::panic_fmt
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/panicking.rs:72:14
  10: <rope::Chunk>::point_to_offset
             at crates/rope/src/rope.rs:794:21
  11: <rope::Rope>::point_to_offset::{closure#0}
             at crates/rope/src/rope.rs:319:36
  12: <core::option::Option<&rope::Chunk>>::map_or::<usize, <rope::Rope>::point_to_offset::{closure#0}>
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/option.rs:1132:24
  13: <rope::Rope>::point_to_offset
             at crates/rope/src/rope.rs:317:15
  14: <text::BufferSnapshot>::point_to_offset
             at crates/text/src/text.rs:1786:9
  15: <multi_buffer::MultiBufferSnapshot>::point_to_offset
             at crates/multi_buffer/src/multi_buffer.rs:2411:20
  16: <rope::point::Point as multi_buffer::ToOffset>::to_offset
             at crates/multi_buffer/src/multi_buffer.rs:4428:9
  17: <multi_buffer::MultiBufferSnapshot>::anchor_at::<rope::point::Point>
             at crates/multi_buffer/src/multi_buffer.rs:2900:22
  18: <editor::element::EditorElement>::update_visible_cursor
             at crates/editor/src/element.rs:692:15
  19: <editor::element::EditorElement>::mouse_moved
             at crates/editor/src/element.rs:660:17
  20: <editor::element::EditorElement>::paint_mouse_listeners::{closure#2}::{closure#0}
             at crates/editor/src/element.rs:3286:25
  21: <gpui::window::WindowContext as gpui::VisualContext>::update_view::<editor::Editor, (), <editor::element::EditorElement>::paint_mouse_listeners::{closure#2}::{closure#0}>
             at crates/gpui/src/window.rs:3651:22
  22: <gpui::view::View<editor::Editor>>::update::<gpui::window::WindowContext, (), <editor::element::EditorElement>::paint_mouse_listeners::{closure#2}::{closure#0}>
             at crates/gpui/src/view.rs:76:9
  23: <editor::element::EditorElement>::paint_mouse_listeners::{closure#2}
             at crates/editor/src/element.rs:3275:21
  24: <gpui::window::WindowContext>::on_mouse_event::<gpui::interactive::MouseMoveEvent, <editor::element::EditorElement>::paint_mouse_listeners::{closure#2}>::{closure#0}
             at crates/gpui/src/window.rs:2775:21
  25: <alloc::boxed::Box<dyn for<'a, 'b, 'c> core::ops::function::FnMut<(&'a dyn core::any::Any, gpui::window::DispatchPhase, &'b mut gpui::window::WindowContext<'c>), Output = ()>> as core::ops::function::FnMut<(&dyn core::any::Any, gpui::window::DispatchPhase, &mut gpui::window::WindowContext)>>::call_mut
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2027:9
  26: <gpui::window::WindowContext>::dispatch_mouse_event
             at crates/gpui/src/window.rs:3008:17
  27: <gpui::window::WindowContext>::dispatch_event
             at crates/gpui/src/window.rs:2974:13
  28: <gpui::window::Window>::new::{closure#8}::{closure#0}
             at crates/gpui/src/window.rs:753:46
  29: <gpui::app::AppContext as gpui::Context>::update_window::<gpui::window::DispatchEventResult, <gpui::window::Window>::new::{closure#8}::{closure#0}>::{closure#0}
             at crates/gpui/src/app.rs:1327:26
  30: <gpui::app::AppContext>::update::<core::result::Result<gpui::window::DispatchEventResult, anyhow::Error>, <gpui::app::AppContext as gpui::Context>::update_window<gpui::window::DispatchEventResult, <gpui::window::Window>::new::{closure#8}::{closure#0}>::{closure#0}>
             at crates/gpui/src/app.rs:361:22
  31: <gpui::app::AppContext as gpui::Context>::update_window::<gpui::window::DispatchEventResult, <gpui::window::Window>::new::{closure#8}::{closure#0}>
             at crates/gpui/src/app.rs:1318:9
  32: <gpui::app::async_context::AsyncAppContext as gpui::Context>::update_window::<gpui::window::DispatchEventResult, <gpui::window::Window>::new::{closure#8}::{closure#0}>
             at crates/gpui/src/app/async_context.rs:91:9
  33: <gpui::window::AnyWindowHandle>::update::<gpui::app::async_context::AsyncAppContext, gpui::window::DispatchEventResult, <gpui::window::Window>::new::{closure#8}::{closure#0}>
             at crates/gpui/src/window.rs:4483:9
  34: <gpui::window::Window>::new::{closure#8}
             at crates/gpui/src/window.rs:752:17
  35: <alloc::boxed::Box<dyn core::ops::function::FnMut<(gpui::interactive::PlatformInput,), Output = gpui::window::DispatchEventResult>> as core::ops::function::FnMut<(gpui::interactive::PlatformInput,)>>::call_mut
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2027:9
  36: gpui::platform::mac::window::handle_view_event
             at crates/gpui/src/platform/mac/window.rs:1421:13
  37: <unknown>
  38: <unknown>
  39: <unknown>
  40: <unknown>
  41: <unknown>
  42: <unknown>
  43: <unknown>
  44: <() as objc::message::MessageArguments>::invoke::<()>
             at /Users/jason/.cargo/registry/src/index.crates.io-6f17d22bba15001f/objc-0.2.7/src/message/mod.rs:128:17
  45: objc::message::platform::send_unverified::<objc::runtime::Object, (), ()>
             at /Users/jason/.cargo/registry/src/index.crates.io-6f17d22bba15001f/objc-0.2.7/src/message/apple/mod.rs:27:9
  46: objc::message::send_message::<objc::runtime::Object, (), ()>
             at /Users/jason/.cargo/registry/src/index.crates.io-6f17d22bba15001f/objc-0.2.7/src/message/mod.rs:178:5
      <*mut objc::runtime::Object as cocoa::appkit::NSApplication>::run
             at /Users/jason/.cargo/registry/src/index.crates.io-6f17d22bba15001f/cocoa-0.25.0/src/appkit.rs:603:9
  47: <gpui::platform::mac::platform::MacPlatform as gpui::platform::Platform>::run
             at crates/gpui/src/platform/mac/platform.rs:371:13
  48: <gpui::app::App>::run::<Zed::main::{closure#3}>
             at crates/gpui/src/app.rs:140:9
  49: Zed::main
             at crates/zed/src/main.rs:328:5
  50: <fn() as core::ops::function::FnOnce<()>>::call_once
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:250:5
  51: std::sys_common::backtrace::__rust_begin_short_backtrace::<fn(), ()>
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys_common/backtrace.rs:155:18
  52: std::rt::lang_start::<()>::{closure#0}
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:166:18
  53: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/ops/function.rs:284:13
      std::panicking::try::do_call
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:552:40
      std::panicking::try
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
      std::panic::catch_unwind
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
      std::rt::lang_start_internal::{{closure}}
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:148:48
      std::panicking::try::do_call
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:552:40
      std::panicking::try
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:516:19
      std::panic::catch_unwind
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panic.rs:146:14
      std::rt::lang_start_internal
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:148:20
  54: std::rt::lang_start::<()>
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/rt.rs:165:17
  55: _main

How to reproduce

Open this file: https://raw.githubusercontent.com/huacnlee/autocorrect/18e18651cd5b30ab10e3843ae7fb4c61dff9e8c4/README.md as example

Mouse point to some Chinese char and scroll up, down again and again.

Then it may crash in sometime.

Environment

OS: aarch64-apple-darwin Zed version: main branch (https://github.com/zed-industries/zed/commit/410c46a5517e397890580c21dab13575e7839d5a)

If applicable, add mockups / screenshots to help explain present your vision of the feature

No response

If applicable, attach your ~/Library/Logs/Zed/Zed.log file to this issue.

No response