blink.cmp
blink.cmp copied to clipboard
Fuzzy Rust implementation crashes neovim on insert text
Make sure you have done the following
- [x] Updated to the latest version of
blink.cmp - [x] Searched for existing issues and documentation (try
<C-k>on https://cmp.saghen.dev)
Bug Description
Related to this issue: github.com/neovim/neovim/issues/35384
When inserting text, Neovim would crash with backtrace:
❯ gdb -q /home/sicro/neovim/build/bin/nvim /home/sicro/neovim/build/bin/core
Reading symbols from /home/sicro/neovim/build/bin/nvim...
warning: Can't open file anon_inode:[io_uring] during file-backed mapping note processing
[New LWP 24931]
[New LWP 25031]
[New LWP 25028]
[New LWP 25030]
[New LWP 25029]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib64/libthread_db.so.1".
Core was generated by `/home/sicro/neovim/build/bin/nvim --embed'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007ffff7ca9380 in ?? ()
[Current thread is 1 (Thread 0x7ffff7cc9780 (LWP 24931))]
(gdb) thread apply all bt full
Thread 5 (Thread 0x7ffff617e6c0 (LWP 25029)):
#0 0x00007ffff7d921ee in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#1 0x00007ffff7d86d9b in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#2 0x00007ffff7d873cc in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#3 0x00007ffff7d8993a in pthread_cond_wait () from /usr/lib64/libc.so.6
No symbol table info available.
#4 0x0000555555a49539 in uv_cond_wait ()
No symbol table info available.
#5 0x0000555555a36a5a in worker ()
No symbol table info available.
#6 0x00007ffff7d8a328 in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#7 0x00007ffff7df8708 in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
Thread 4 (Thread 0x7ffff597d6c0 (LWP 25030)):
#0 0x00007ffff7d921ee in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#1 0x00007ffff7d86d9b in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#2 0x00007ffff7d873cc in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#3 0x00007ffff7d8993a in pthread_cond_wait () from /usr/lib64/libc.so.6
No symbol table info available.
#4 0x0000555555a49539 in uv_cond_wait ()
No symbol table info available.
#5 0x0000555555a36a5a in worker ()
No symbol table info available.
#6 0x00007ffff7d8a328 in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#7 0x00007ffff7df8708 in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
Thread 3 (Thread 0x7ffff697f6c0 (LWP 25028)):
#0 0x00007ffff7d921ee in ?? () from /usr/lib64/libc.so.6
--Type <RET> for more, q to quit, c to continue without paging--
No symbol table info available.
#1 0x00007ffff7d86d9b in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#2 0x00007ffff7d873cc in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#3 0x00007ffff7d8993a in pthread_cond_wait () from /usr/lib64/libc.so.6
No symbol table info available.
#4 0x0000555555a49539 in uv_cond_wait ()
No symbol table info available.
#5 0x0000555555a36a5a in worker ()
No symbol table info available.
#6 0x00007ffff7d8a328 in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#7 0x00007ffff7df8708 in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
Thread 2 (Thread 0x7ffff517c6c0 (LWP 25031)):
#0 0x00007ffff7d921ee in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#1 0x00007ffff7d86d9b in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#2 0x00007ffff7d873cc in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#3 0x00007ffff7d8993a in pthread_cond_wait () from /usr/lib64/libc.so.6
No symbol table info available.
#4 0x0000555555a49539 in uv_cond_wait ()
No symbol table info available.
#5 0x0000555555a36a5a in worker ()
No symbol table info available.
#6 0x00007ffff7d8a328 in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
#7 0x00007ffff7df8708 in ?? () from /usr/lib64/libc.so.6
No symbol table info available.
Thread 1 (Thread 0x7ffff7cc9780 (LWP 24931)):
#0 0x00007ffff7ca9380 in ?? ()
No symbol table info available.
#1 0x00007ffff46cca4f in ?? () from /home/sicro/.local/share/nvim/lazy/blink.cmp/lua/blink/cmp/fuzzy/rust/../../../../../target/release/libblink_cmp_fuzzy.so
--Type <RET> for more, q to quit, c to continue without paging--
No symbol table info available.
#2 0x00007ffff46cc741 in ?? () from /home/sicro/.local/share/nvim/lazy/blink.cmp/lua/blink/cmp/fuzzy/rust/../../../../../target/release/libblink_cmp_fuzzy.so
No symbol table info available.
#3 0x00007ffff46a7106 in ?? () from /home/sicro/.local/share/nvim/lazy/blink.cmp/lua/blink/cmp/fuzzy/rust/../../../../../target/release/libblink_cmp_fuzzy.so
No symbol table info available.
#4 0x00007ffff7eda900 in _Unwind_RaiseException () from /usr/lib/gcc/x86_64-pc-linux-gnu/15/libgcc_s.so.1
No symbol table info available.
#5 0x00005555559c8b25 in err_raise_ext (g=0x7ffff7ca93e0, errcode=<optimized out>) at lj_err.c:758
No locals.
#6 lj_err_throw (L=0x7ffff7ca9380, errcode=errcode@entry=2) at lj_err.c:774
g = 0x7ffff7ca93e0
#7 0x00005555559c8f3a in lj_err_run (L=<optimized out>) at lj_err.c:899
ef = <optimized out>
#8 0x00005555559c9799 in lua_error (L=<optimized out>) at lj_err.c:1121
No locals.
#9 0x00007ffff4676738 in ?? () from /home/sicro/.local/share/nvim/lazy/blink.cmp/lua/blink/cmp/fuzzy/rust/../../../../../target/release/libblink_cmp_fuzzy.so
No symbol table info available.
#10 0x00007ffff466fcb1 in ?? () from /home/sicro/.local/share/nvim/lazy/blink.cmp/lua/blink/cmp/fuzzy/rust/../../../../../target/release/libblink_cmp_fuzzy.so
No symbol table info available.
#11 0x00005555559e9a36 in lj_BC_FUNCC ()
No symbol table info available.
#12 0x00005555559d4e11 in lua_pcall (L=L@entry=0x7ffff7ca9380, nargs=nargs@entry=0, nresults=nresults@entry=0, errfunc=errfunc@entry=-2) at lj_api.c:1122
g = 0x7ffff7ca93e0
oldh = <optimized out>
ef = <optimized out>
status = <optimized out>
__func__ = "lua_pcall"
#13 0x00005555557a61a1 in nlua_pcall (lstate=lstate@entry=0x7ffff7ca9380, nargs=nargs@entry=0, nresults=nresults@entry=0) at /home/sicro/neovim/src/nvim/lua/executor.c:179
pre_top = 2
status = <optimized out>
#14 0x00005555557abe61 in nlua_schedule_event (argv=<optimized out>) at /home/sicro/neovim/src/nvim/lua/executor.c:381
cb = <optimized out>
ns_id = 0
--Type <RET> for more, q to quit, c to continue without paging--
lstate = 0x7ffff7ca9380
#15 0x00005555558d94f6 in state_handle_k_event () at /home/sicro/neovim/src/nvim/state.c:118
event = {handler = 0x5555557abe10 <nlua_schedule_event>, argv = {0x475, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
#16 0x0000555555699805 in insert_handle_key (s=<optimized out>) at /home/sicro/neovim/src/nvim/edit.c:937
No locals.
#17 insert_execute (state=0x7fffffffbd00, key=<optimized out>) at /home/sicro/neovim/src/nvim/edit.c:709
s = 0x7fffffffbd00
#18 0x00005555558d93d2 in state_enter (s=0x7fffffffbd00) at /home/sicro/neovim/src/nvim/state.c:100
check_result = <optimized out>
key = <optimized out>
execute_result = <optimized out>
getkey = <optimized out>
#19 0x000055555569b489 in insert_enter (s=0x7fffffffbd00) at /home/sicro/neovim/src/nvim/edit.c:340
inserted = <optimized out>
#20 edit (cmdchar=<optimized out>, startln=<optimized out>, count=<optimized out>) at /home/sicro/neovim/src/nvim/edit.c:1336
s = {{state = {check = 0x555555696920 <insert_check>, execute = 0x555555698180 <insert_execute>}, ca = 0x0, mincol = 0, cmdchar = 105, cmdchar_todo = 105, startln = 0, count = 0, c = -26365, lastc = 97, i = 0, did_backspace = false, line_is_white = false, old_topline = 1, old_topfill = 0, inserted_space = 0, replaceState = 272, did_restart_edit = 0, nomove = false}}
#21 0x000055555580a672 in normal_finish_command (s=<optimized out>) at /home/sicro/neovim/src/nvim/normal.c:1055
prev_finish_op = <optimized out>
#22 normal_execute (state=0x7fffffffbe10, key=<optimized out>) at /home/sicro/neovim/src/nvim/normal.c:1247
s = 0x7fffffffbe10
__PRETTY_FUNCTION__ = "normal_execute"
#23 0x00005555558d9410 in state_enter (s=0x7fffffffbe10) at /home/sicro/neovim/src/nvim/state.c:100
check_result = <optimized out>
key = <optimized out>
execute_result = <optimized out>
getkey = <optimized out>
#24 0x0000555555806c51 in normal_enter (cmdwin=<optimized out>, noexmode=<optimized out>) at /home/sicro/neovim/src/nvim/normal.c:521
state = {state = {check = 0x5555558081d0 <normal_check>, execute = 0x555555808b20 <normal_execute>}, command_finished = false, ctrl_w = false,need_flushbuf = false, set_prevcount = false, previous_got_int = false, cmdwin = false, noexmode = false, toplevel = true, oa = {op_type = 0, regname = 0, motion_type = kMTCharWise, motion_force = 0, use_reg_one = false, inclusive = false, end_adjusted = false, start = {lnum = 0, col = 0, coladd = 0}, end = {lnum = 0, col = 0, coladd = 0}, cursor_start = {lnum = 0, col = 0, coladd = 0}, line_count = 0, empty = false, is_VIsual = false, start_vcol =0, end_vcol = 0, prev_opcount = 0, prev_count0 = 0, excl_tr_ws = false}, ca = {oap = 0x7fffffffbe28, prechar = 0, cmdchar = -26621, nchar = 0, nchar_composing = '\000' <repeats 31 times>, nchar_len = 0, extra_char = 0, opcount = 0, count0 = 0, count1 = 1, arg = 0, retval = 0, searchbuf = 0x0}, mapped_len = 0, old_mapped_len = 0, idx = 187, c = -26621, old_col = 48, old_pos = {lnum = 15, col = 50, coladd = 0}}
prev_oap = 0x0
#25 0x00005555555fb1aa in main (argc=<optimized out>, argv=<optimized out>) at /home/sicro/neovim/src/nvim/main.c:654
fname = <optimized out>
--Type <RET> for more, q to quit, c to continue without paging--
params = {argc = 2, argv = 0x7fffffffc378, use_vimrc = 0x0, clean = false, n_commands = 0, commands = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,0x0, 0x0}, cmds_tofree = "\000\000\000\000\000\000\000\000\000", n_pre_commands = 0, pre_commands = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, luaf = 0x0, lua_arg0 = -1, edit_type = 0, tagname = 0x0, use_ef = 0x0, input_istext = false, no_swap_file = 0, use_debug_break_level = -1, window_count = 1, window_layout = 0, diff_mode = 0, listen_addr = 0x0, remote = 0, server_addr = 0x0, scriptin = 0x0, scriptout = 0x0, scriptout_append = false, had_stdin_file = false}
cwd = 0x0
has_term = <optimized out>
use_builtin_ui = <optimized out>
remote_ui = <optimized out>
use_remote_ui = <optimized out>
listen_and_embed = <optimized out>
vimrc_none = <optimized out>
__PRETTY_FUNCTION__ = "main"
The trigger for the issue is having blink.cmp installed with the Rust fuzzy implementation.
As suggested by Justin under that Issue, it's very likely an issue in the FFI usage.
Relevant configuration
fuzzy = {
implementation = 'rust'
},
neovim version
NVIM v0.11.3 Build type: Release LuaJIT 2.1.1731601260
blink.cmp version
main
Have you tested this since #2136 was merged?
@Saghen This is the current state of the plugin:
version 1.7.0
tag v1.7.0
branch main
commit 327fff9
I can confirm this happens on 0.11.4 aswell