Comments (11)
proposed fix here
from kakoune.
Cannot see what might be going on here, next time it reproduces and you have it in gdb, would you be able to see where we are in frame #5
, and what list of strings we have passed to #2
?
I think we are inside one of the on_key_with_auto_info calls that then call insert, but I cannot see how either of them (the one at input_handler.cpp:1308 and the one at input_handler.cpp:1361) would generate either and empty ArrayView or a bad string.
from kakoune.
Sorry I never used gdb before and already recompiled kakoune so I suppose some info might have been lost. How do I check list of strings we have passed to #2
in gdb? Will it help if I attach zst
file coredumpctl info
is referring to?
from kakoune.
Got same crash today with Kakoune 2024.05.18-113-g202747e6
. I hope following gives answers to your questions. If it's not enough, pls let me know.
(gdb) bt
#0 Kakoune::fnv1a (data=0x5b2b26e22198 "", len=18446744073709551523) at src/hash.hh:20
#1 Kakoune::hash_value (str=<synthetic pointer>...) at src/string.hh:26
#2 Kakoune::StringData::Registry::intern (this=0x7ffeaa49b600, str=...) at src/shared_string.cc:23
#3 0x00005b2b0348730a in Kakoune::intern (str=...) at src/shared_string.hh:83
#4 Kakoune::Buffer::insert (this=this@entry=0x5b2b26c738e0, pos=..., content=...) at src/buffer.cc:514
#5 0x00005b2b03634c02 in Kakoune::insert (buffer=..., sel=..., pos=..., content=...) at src/selection.cc:433
#6 0x00005b2b03637e53 in Kakoune::FunctionRef<void(unsigned long, Kakoune::Selection&)>::operator() (this=<synthetic pointer>, args#0=<optimized out>, args#1=...) at src/utils.hh:191
#7 Kakoune::SelectionList::for_each (this=this@entry=0x5b2b26c44420, func=..., may_append=may_append@entry=false) at src/selection.cc:406
#8 0x00005b2b0357e71a in Kakoune::InputModes::Insert::insert<Kakoune::String> (this=0x5b2b26e03840, strings=...) at src/utils.hh:184
#9 Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}::operator()(Kakoune::Key, Kakoune::Context&) const (__closure=<optimized out>, key=...) at src/input_handler.cc:1313
#10 Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context const&, Kakoune::StringView, Kakoune::KeymapMode, Kakoune::Input
Modes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Context&)#1}::operator()(Kakoune::Key, Kakoune::Context&) (
__closure=<optimized out>, key=..., context=...) at src/input_handler.hh:201
#11 std::__invoke_impl<void, Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context const&, Kakoune::StringView, Kakoune::K
eymapMode, Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Context&)#1}&, Kakoune::Key, Kakoune::Conte
xt&>(std::__invoke_other, Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context const&, Kakoune::StringView, Kakoune::Keym
apMode, Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Context&)#1}&, Kakoune::Key&&, Kakoune::Contex
t&) (__f=...) at /usr/include/c++/14.2.1/bits/invoke.h:61
#12 std::__invoke_r<void, Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context const&, Kakoune::StringView, Kakoune::Keym
apMode, Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Context&)#1}&, Kakoune::Key, Kakoune::Context&
>(Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context const&, Kakoune::StringView, Kakoune::KeymapMode, Kakoune::InputMo
des::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Context&)#1}&, Kakoune::Key&&, Kakoune::Context&) (__fn=...)
at /usr/include/c++/14.2.1/bits/invoke.h:111
#13 std::_Function_handler<void (Kakoune::Key, Kakoune::Context&), Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context c
onst&, Kakoune::StringView, Kakoune::KeymapMode, Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Conte
xt&)#1}>::_M_invoke(std::_Any_data const&, Kakoune::Key&&, Kakoune::Context&) (__functor=..., __args#0=..., __args#1=...) at /usr/include/c++/14.2.1/bits/std_function.h:290
#14 0x00005b2b0357333c in std::function<void(Kakoune::Key, Kakoune::Context&)>::operator() (this=0x5b2b26c74f20, __args#0=..., __args#1=...) at /usr/include/c++/14.2.1/bits/std_function.h:591
#15 Kakoune::InputModes::NextKey::on_key (this=0x5b2b26c74ef0, key=...) at src/input_handler.cc:1141
#16 0x00005b2b0356d8b0 in Kakoune::InputMode::handle_key (this=0x5b2b26c74ef0, key=..., synthesized=true) at src/input_handler.cc:32
#17 operator() (__closure=<synthetic pointer>, k=..., synthesized=true) at src/input_handler.cc:1668
#18 Kakoune::InputHandler::handle_key (this=this@entry=0x5b2b26c443b0, key=..., synthesized=synthesized@entry=false) at src/input_handler.cc:1677
#19 0x00005b2b034a1aff in Kakoune::Client::process_pending_inputs (this=this@entry=0x5b2b26c44340) at src/client.cc:114
#20 0x00005b2b034a79e3 in Kakoune::ClientManager::process_pending_inputs (this=this@entry=0x7ffeaa49b740) at src/client_manager.cc:111
#21 0x00005b2b035c5788 in Kakoune::run_server (session=..., server_init=..., client_init=..., init_buffer=..., init_coord=..., flags=Kakoune::ServerFlags::None, ui_type=Kakoune::UIType::Terminal,
debug_flags=Kakoune::DebugFlags::None, files=...) at src/main.cc:913
#22 0x00005b2b03479b5d in main (argc=<optimized out>, argv=<optimized out>) at src/main.cc:1257
(gdb) f 5
#5 0x00005b2b03634c02 in Kakoune::insert (buffer=..., sel=..., pos=..., content=...) at src/selection.cc:433
433 auto range = buffer.insert(pos, content);
(gdb) info locals
range = <optimized out>
(gdb) f 2
#2 Kakoune::StringData::Registry::intern (this=0x7ffeaa49b600, str=...) at src/shared_string.cc:23
23 return intern(str, hash_value(str));
(gdb) info locals
No locals.
(gdb)
from kakoune.
Screencast.from.2024-08-27.17-05-01.webm
Bottom pane shows my key presses. Basically what I did is C<a-i>bcfmt.Spr<tab><c-r>"
. It's constantly reproducible on my side, of course there are kak-lsp
and gopls
involved. My gopls
setup is like below:
[language_server.gopls]
filetypes = ["go"]
roots = ["Gopkg.toml", "go.mod", ".git", ".hg"]
[language_server.gopls.settings.gopls]
hints.assignVariableTypes = true
hints.compositeLiteralFields = true
hints.compositeLiteralTypes = true
hints.constantValues = true
hints.functionTypeParameters = true
hints.parameterNames = true
hints.rangeVariableTypes = true
"ui.completion.usePlaceholders" = true
"ui.semanticTokens" = true
from kakoune.
Unfortunately I cannot yet make sense of what is happening, the issue seems to be that whatever is in the default register "
is invalid, either we have an empty list of strings, but this should be prevented by the logic in StaticRegister::get(), or we have a corrupted string. The string we pass to fnv1 has an invalid length, 18446744073709551523, which would be -93 if signed.
My intuition is that somehow lsp-snippets-select-next-placeholders corrupts the yanked data but I cannot see how, would you be able to reproduce while running Kakoune in valgrind or with asan enabled (build with make sanitize=address
) and see if that gives some extra output ?
from kakoune.
C<a-i>bcfmt.Spr<tab><c-r>"
The screen recording looks like you pressed <c-n>
instead of <tab>
(unless you mapped <tab>
to that).
If I type fmt.Spr<c-n><tab>
where tab is mapped to lsp-snippets-select-next-placeholders
,
then I get fmt.Sprint()
with the cursor at the end.
(IOW, lsp-snippets-select-next-placeholders
is useless/unnecessary for the first argument.)
I'm trying to reproduce; can you reduce your config, ideally trigger it with an empty HOME
?
I saw that you use lsp-inlay-hints-enable
, maybe that causes issues.
from kakoune.
ok I can reproduce with <c-n>
, will look at it later
from kakoune.
The screen recording looks like you pressed
<c-n>
instead of<tab>
(unless you mapped<tab>
to that).
That's correct, my <tab>
is remapped like:
hook global InsertCompletionShow '.*' %{
map window insert <tab> <c-n>
map window insert <s-tab> <c-p>
hook -once -always window InsertCompletionHide '.*' %{
unmap window insert <tab>
unmap window insert <s-tab>
}
}
I saw that you use
lsp-inlay-hints-enable
, maybe that causes issues.
It doesn't matter, same happens with disabled lsp-inlay-hints
.
If I do just <a-i>bcfmt.Spr<tab><c-r>"
without C
first then I have a corrupted result:
from kakoune.
it's a use-after free of the unnamed register.
It's connected to the super complex InsertCompletionHide
hook (for LSP snippet completions) which runs just before <c-r>"
is executed, because if I remove that hook the problem goes away.
Looking closer..
�[1m�[31m==11408==ERROR: AddressSanitizer: heap-use-after-free on address 0x5040000860a7 at pc 0x57dbf869e7c1 bp 0x7fffef3bf5e0 sp 0x7fffef3bf5d0
�[1m�[0m�[1m�[34mREAD of size 1 at 0x5040000860a7 thread T0�[1m�[0m
#0 0x57dbf869e7c0 in Kakoune::String::Data::is_long() const src/string.hh:187
#1 0x57dbf869e7c0 in Kakoune::String::Data::data() const src/string.hh:191
#2 0x57dbf869e7c0 in Kakoune::String::data() const src/string.hh:138
#3 0x57dbf869e7c0 in Kakoune::StringView::StringView(Kakoune::String const&) src/string.hh:254
#4 0x57dbf869e7c0 in Kakoune::InputModes::Insert::insert<Kakoune::String>(Kakoune::ArrayView<Kakoune::String const>)::{lambda(unsigned long, Kakoune::Selection&)#1}::operator()(unsigned long, Kakoune::Selection&) const src/input_handler.cc:1433
#5 0x57dbf869e7c0 in Kakoune::FunctionRef<void (unsigned long, Kakoune::Selection&)>::FunctionRef<Kakoune::InputModes::Insert::insert<Kakoune::String>(Kakoune::ArrayView<Kakoune::String const>)::{lambda(unsigned long, Kakoune::Selection&)#1}>(Kakoune::InputModes::Insert::insert<Kakoune::String>(Kakoune::ArrayView<Kakoune::String const>)::{lambda(unsigned long, Kakoune::Selection&)#1}&&)::{lambda(void*, unsigned long, Kakoune::Selection&)#1}::operator()(void*, unsigned long, Kakoune::Selection&) const src/utils.hh:187
#6 0x57dbf869e7c0 in Kakoune::FunctionRef<void (unsigned long, Kakoune::Selection&)>::FunctionRef<Kakoune::InputModes::Insert::insert<Kakoune::String>(Kakoune::ArrayView<Kakoune::String const>)::{lambda(unsigned long, Kakoune::Selection&)#1}>(Kakoune::InputModes::Insert::insert<Kakoune::String>(Kakoune::ArrayView<Kakoune::String const>)::{lambda(unsigned long, Kakoune::Selection&)#1}&&)::{lambda(void*, unsigned long, Kakoune::Selection&)#1}::_FUN(void*, unsigned long, Kakoune::Selection&) src/utils.hh:186
#7 0x57dbf89cc16f in Kakoune::FunctionRef<void (unsigned long, Kakoune::Selection&)>::operator()(unsigned long, Kakoune::Selection&) const src/utils.hh:193
#8 0x57dbf89cc16f in Kakoune::SelectionList::for_each(Kakoune::FunctionRef<void (unsigned long, Kakoune::Selection&)>, bool) src/selection.cc:406
#9 0x57dbf8703541 in void Kakoune::InputModes::Insert::insert<Kakoune::String>(Kakoune::ArrayView<Kakoune::String const>) src/input_handler.cc:1431
#10 0x57dbf8703541 in Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}::operator()(Kakoune::Key, Kakoune::Context&) const src/input_handler.cc:1317
#11 0x57dbf8703541 in Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context const&, Kakoune::StringView, Kakoune::KeymapMode, Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Context&)#1}::operator()(Kakoune::Key, Kakoune::Context&) src/input_handler.hh:204
#12 0x57dbf8703541 in void std::__invoke_impl<void, Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context const&, Kakoune::StringView, Kakoune::KeymapMode, Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Context&)#1}&, Kakoune::Key, Kakoune::Context&>(std::__invoke_other, Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context const&, Kakoune::StringView, Kakoune::KeymapMode, Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Context&)#1}&, Kakoune::Key&&, Kakoune::Context&) /usr/include/c++/14.1.1/bits/invoke.h:61
#13 0x57dbf8703541 in std::enable_if<is_invocable_r_v<void, Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context const&, Kakoune::StringView, Kakoune::KeymapMode, Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Context&)#1}&, Kakoune::Key, Kakoune::Context&>, void>::type std::__invoke_r<void, Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context const&, Kakoune::StringView, Kakoune::KeymapMode, Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Context&)#1}&, Kakoune::Key, Kakoune::Context&>(Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context const&, Kakoune::StringView, Kakoune::KeymapMode, Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Context&)#1}&, Kakoune::Key&&, Kakoune::Context&) /usr/include/c++/14.1.1/bits/invoke.h:111
#14 0x57dbf8703541 in std::_Function_handler<void (Kakoune::Key, Kakoune::Context&), Kakoune::on_next_key_with_autoinfo<Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>(Kakoune::Context const&, Kakoune::StringView, Kakoune::KeymapMode, Kakoune::InputModes::Insert::on_key(Kakoune::Key, bool)::{lambda(Kakoune::Key, Kakoune::Context&)#1}, Kakoune::String, Kakoune::String)::{lambda(Kakoune::Key, Kakoune::Context&)#1}>::_M_invoke(std::_Any_data const&, Kakoune::Key&&, Kakoune::Context&) /usr/include/c++/14.1.1/bits/std_function.h:290
#15 0x57dbf86a8cbb in std::function<void (Kakoune::Key, Kakoune::Context&)>::operator()(Kakoune::Key, Kakoune::Context&) const /usr/include/c++/14.1.1/bits/std_function.h:591
#16 0x57dbf86a8cbb in Kakoune::InputModes::NextKey::on_key(Kakoune::Key, bool) src/input_handler.cc:1145
#17 0x57dbf8690940 in Kakoune::InputMode::handle_key(Kakoune::Key, bool) src/input_handler.cc:32
#18 0x57dbf8690940 in operator() src/input_handler.cc:1673
#19 0x57dbf8690940 in Kakoune::InputHandler::handle_key(Kakoune::Key, bool) src/input_handler.cc:1688
#20 0x57dbf8741248 in Kakoune::Client::process_pending_inputs() src/client.cc:114
#21 0x57dbf8640c47 in Kakoune::ClientManager::process_pending_inputs() src/client_manager.cc:116
#22 0x57dbf8014c5b in Kakoune::run_server(Kakoune::StringView, Kakoune::StringView, Kakoune::StringView, Kakoune::StringView, Kakoune::Optional<Kakoune::BufferCoord>, Kakoune::ServerFlags, Kakoune::UIType, Kakoune::DebugFlags, Kakoune::ArrayView<Kakoune::StringView const>, int&) src/main.cc:947
#23 0x57dbf7f80235 in main src/main.cc:1289
#24 0x7ff61ea34e07 (/usr/lib/libc.so.6+0x25e07) (BuildId: 3de7fd3e8d993406afdcb908e63b88f2f4effea9)
#25 0x7ff61ea34ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 3de7fd3e8d993406afdcb908e63b88f2f4effea9)
#26 0x57dbf7f94ff4 in _start (/home/johannes/git/kakoune/src/kak.opt.san_a+0x130ff4) (BuildId: 944b97c659e9aafc70648d2e3dc740ce322531f8)
�[1m�[32m0x5040000860a7 is located 23 bytes inside of 48-byte region [0x504000086090,0x5040000860c0)
�[1m�[0m�[1m�[35mfreed by thread T0 here:�[1m�[0m
#0 0x7ff61f0ff0ca in operator delete(void*) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:152
#1 0x57dbf84ccc2f in Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16>::deallocate(Kakoune::String*, unsigned long) src/memory.hh:126
#2 0x57dbf84ccc2f in std::allocator_traits<Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16> >::deallocate(Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16>&, Kakoune::String*, unsigned long) /usr/include/c++/14.1.1/bits/alloc_traits.h:361
#3 0x57dbf84ccc2f in std::_Vector_base<Kakoune::String, Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16> >::_M_deallocate(Kakoune::String*, unsigned long) /usr/include/c++/14.1.1/bits/stl_vector.h:389
#4 0x57dbf84ccc2f in std::_Vector_base<Kakoune::String, Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16> >::_M_deallocate(Kakoune::String*, unsigned long) /usr/include/c++/14.1.1/bits/stl_vector.h:385
#5 0x57dbf84ccc2f in void std::vector<Kakoune::String, Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16> >::_M_assign_aux<Kakoune::String const*>(Kakoune::String const*, Kakoune::String const*, std::forward_iterator_tag) /usr/include/c++/14.1.1/bits/vector.tcc:335
#6 0x57dbf84ccc2f in void std::vector<Kakoune::String, Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16> >::assign<Kakoune::String const*, void>(Kakoune::String const*, Kakoune::String const*) /usr/include/c++/14.1.1/bits/stl_vector.h:829
#7 0x57dbf84ccc2f in Kakoune::StaticRegister::set(Kakoune::Context&, Kakoune::ArrayView<Kakoune::String const>, bool) src/register_manager.cc:25
�[1m�[35mpreviously allocated by thread T0 here:�[1m�[0m
#0 0x7ff61f0fe4f2 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
#1 0x57dbf84cc5ab in Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16>::allocate(unsigned long) src/memory.hh:119
#2 0x57dbf84cc5ab in std::allocator_traits<Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16> >::allocate(Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16>&, unsigned long) /usr/include/c++/14.1.1/bits/alloc_traits.h:334
#3 0x57dbf84cc5ab in std::_Vector_base<Kakoune::String, Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16> >::_M_allocate(unsigned long) /usr/include/c++/14.1.1/bits/stl_vector.h:380
#4 0x57dbf84cc5ab in Kakoune::String* std::vector<Kakoune::String, Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16> >::_M_allocate_and_copy<Kakoune::String const*>(unsigned long, Kakoune::String const*, Kakoune::String const*) /usr/include/c++/14.1.1/bits/stl_vector.h:1621
#5 0x57dbf84cc5ab in void std::vector<Kakoune::String, Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16> >::_M_assign_aux<Kakoune::String const*>(Kakoune::String const*, Kakoune::String const*, std::forward_iterator_tag) /usr/include/c++/14.1.1/bits/vector.tcc:331
#6 0x57dbf84cc5ab in void std::vector<Kakoune::String, Kakoune::Allocator<Kakoune::String, (Kakoune::MemoryDomain)16> >::assign<Kakoune::String const*, void>(Kakoune::String const*, Kakoune::String const*) /usr/include/c++/14.1.1/bits/stl_vector.h:829
#7 0x57dbf84cc5ab in Kakoune::StaticRegister::set(Kakoune::Context&, Kakoune::ArrayView<Kakoune::String const>, bool) src/register_manager.cc:25
from kakoune.
here's a reproducer:
# Repro: OI<c-n><c-r>"
hook global InsertCompletionHide .+ %{
evaluate-commands -draft -save-regs '"' %{
set-register dquote foo bar
}
}
from kakoune.
Related Issues (20)
- [BUG][CRASH] regex is broken HOT 1
- [BUG/QUESTION] UTF-8 characters render as question marks in kak under WezTerm on MacOS HOT 2
- [BUG] inconsistent syntax in asciidoc for buffers enclosed by stars such as scratch HOT 2
- [BUG] rendering issue in asciidoc with nested stars and backticks HOT 6
- [BUG] Alternations in lookarounds produce an unhelpful error message
- cygwin compilation error using gcc (windows10) HOT 7
- How to remove the format charaters in the man buffer [QUESTION] HOT 3
- [BUG] Numpad/Keypad numbers produce garbage
- [BUG] (?S) flag strangely changes lookaround behavior HOT 1
- [BUG] Commands relying on viewport don’t work in non-interactive mode
- [REQUEST] hide mapped key in menu
- [BUG] <esc> does not end macro recording HOT 2
- [REQUEST] Allow git-apply to stage/reverse hunk at cursor. HOT 1
- typo in scopes.asciidoc
- [REQUEST] sh filetype quotation highlighting of subshells
- [REQUEST] Syntax highlighter for Typst HOT 2
- [BUG] Some control characters cannot be entered, even using raw insert
- [BUG] hang at startup if pwd is git backed directory HOT 13
- [BUG][CRASH]
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kakoune.