Skip to content

Vim crashes when a lambda assigns to a member of a captured function argument. #21460

Description

@Galvarcus

Steps to reproduce

  1. Create put the following in a script as some_script.vim:
vim9script

def MakeSetter(arg: dict<any>): func()
  return () => {
    arg.key = 1
  }
enddef

def Run()
  var Set = MakeSetter({})
  Set()
enddef

Run()
  1. Execute: vim -u NONE -N -S some_script.vim
  2. Results in
Vim: Caught deadly signal SEGV
Vim: Finished.
Segmentation fault: 11

Expected behaviour

Vim sets key in the dict, as it does when the lambda captures a local variable instead of an argument, or Vim reports an error.

Version of Vim

9.2 patches 1-1129 (fedora 44), 9.2 patches 1-321 (MacVim), and latest 9.2 AppImage.

Environment

fedora 44
TTY, iTerm(3.6.11), and Konsole (26.08.1)
xterm-256color & linux
BASh

Logs and stack traces

From AppImage binary:

Program received signal SIGSEGV, Segmentation fault.
#0  0x00005555558efe29 in ?? ()
#1  0x00005555558f6c9b in call_def_function ()
#2  0x00005555558bf921 in ?? ()
#3  0x00005555558c0cb5 in call_user_func_check ()
#4  0x00005555558c20ee in call_func ()
#5  0x00005555558bde4f in get_func_tv ()
...
#16 0x00005555556680b6 in eval1 ()
#17 0x0000555555667e47 in eval0_retarg ()
#18 0x0000555555667ca2 in eval0 ()

Activity

  1. Galvarcus commented on Oct 6, 2026

    @Galvarcus
    Author

    Crash on Fedora 44:

               PID: 7405 (vim)
               UID: 1000 (joe)
               GID: 1000 (joe)
            Signal: 11 (SEGV)
         Timestamp: Mon 2026-10-12 09:20:33 EDT (6s ago)
      Command Line: vim -u NONE -N -S repro.vim
        Executable: /usr/bin/vim
     Control Group: /user.slice/user-1000.slice/[email protected]/app.slice/app-org.kde.konsole-6178.scope/tab(6213).scope
              Unit: [email protected]
         User Unit: app-org.kde.konsole-6178.scope
             Slice: user-1000.slice
         Owner UID: 1000 (joe)
           Boot ID: 9014d7bc636d4ab8b9d921dc534303ad
        Machine ID: ceff3c9fb3d94a699ddbc2741c4ccd26
          Hostname: customer.atlagax1.isp.starlink.com
           Storage: /var/lib/systemd/coredump/core.vim.1000.9014d7bc636d4ab8b9d921dc534303ad.7405.1791811233000000.zst (present)
      Size on Disk: 166.3K
           Package: vim/9.2.1129-1.fc44
          build-id: 0d25cefbf360a84286d251e2d136b14cbe85f548
           Message: Process 7405 (vim) of user 1000 dumped core.
                    
                    Module libpcre2-8.so.0 from rpm pcre2-10.47-1.fc44.1.x86_64
                    Module libgpm.so.2 from rpm gpm-1.20.7-53.fc44.x86_64
                    Module libacl.so.1 from rpm acl-2.4.0-1.fc44.x86_64
                    Module libsodium.so.26 from rpm libsodium-1.0.22-1.fc44.x86_64
                    Module libtinfo.so.6 from rpm ncurses-6.6-1.fc44.x86_64
                    Module libselinux.so.1 from rpm libselinux-3.11-2.fc44.x86_64
                    Module vim from rpm vim-9.2.1129-1.fc44.x86_64
                    Stack trace of thread 7405:
                    #0  0x00007f5f3d08e1bb kill (libc.so.6 + 0x1a1bb)
                    #1  0x000055d843ed8c7f mch_exit (vim + 0x1c9c7f)
                    #2  0x000055d8440aadfc getout (vim + 0x39bdfc)
                    #3  0x00007f5f3d08dfb0 __restore_rt (libc.so.6 + 0x19fb0)
                    #4  0x000055d84402362e exec_instructions.lto_priv.0 (vim + 0x31462e)
                    #5  0x000055d844025264 call_def_function (vim + 0x316264)
                    #6  0x000055d843ffc55e call_user_func (vim + 0x2ed55e)
                    #7  0x000055d843ffd86f call_user_func_check (vim + 0x2ee86f)
                    #8  0x000055d843ffac6d call_func (vim + 0x2ebc6d)
                    #9  0x000055d843ff2ca3 get_func_tv (vim + 0x2e3ca3)
                    #10 0x000055d843d8d856 eval_func.lto_priv.0 (vim + 0x7e856)
                    #11 0x000055d843d8f3f4 eval9 (vim + 0x803f4)
                    #12 0x000055d843d90221 eval5 (vim + 0x81221)
                    #13 0x000055d843d905e8 eval4.lto_priv.0 (vim + 0x815e8)
                    #14 0x000055d843d90a8a eval2.lto_priv.0 (vim + 0x81a8a)
                    #15 0x000055d843d93cac eval0_retarg (vim + 0x84cac)
                    #16 0x000055d843df24d9 ex_eval (vim + 0xe34d9)
                    #17 0x000055d843ddefc1 do_one_cmd (vim + 0xcffc1)
                    #18 0x000055d843de29eb do_cmdline (vim + 0xd39eb)
                    #19 0x000055d843f4ed2b do_source_ext.lto_priv.0 (vim + 0x23fd2b)
                    #20 0x000055d843f4c2c9 cmd_source.lto_priv.0 (vim + 0x23d2c9)
                    #21 0x000055d843ddefc1 do_one_cmd (vim + 0xcffc1)
                    #22 0x000055d843de29eb do_cmdline (vim + 0xd39eb)
                    #23 0x000055d843d15b36 main (vim + 0x6b36)
                    #24 0x00007f5f3d077681 __libc_start_call_main (libc.so.6 + 0x3681)
                    #25 0x00007f5f3d077798 __libc_start_main@@GLIBC_2.34 (libc.so.6 + 0x3798)
                    #26 0x000055d843d16c45 _start (vim + 0x7c45)
                    ELF object binary architecture: AMD x86-64
    
  2. added a commit that references this issue on Oct 7, 2026
    b2b47bd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions