Subject: Re: Segfault when displaying completion lists
From: Eric Cook <[email-masked]>
To: [email-masked]
Date: Mon, 8 Feb 2016 18:39:14 -0500
List-Id: Zsh Workers List <zsh-workers.zsh.org>

On 02/08/2016 05:58 PM, Christian Heinrich wrote:
> Hello,
> 
> I'm running ZSH 5.2-3 on my Debian Testing system. This error existed
> previously, too, but I only found the time today to find a minimal
> setup for this. Here we go:
> 
> % zsh --norcs
> % zmodload zsh/complist
> % autoload -U compinit && compinit -d ~/.zsh/cache/zcompdump 
> % zstyle ':completion:*' list-prompt '%p'
> % bindkey -d
> % ls /usr/lib/<TAB>
> Now a huge list should be displayed with a pager. Press "Arrow Down"
> and it should segfault.
> 
> 
> This does not happen if the "zsh/complist" module is not loaded.
> 
> Another interesting observation:
> 
> After the <TAB>, press backspace instead of "arrow down" and remove the
> whole command (do not accept the line). Type "bindkey -d" (yes, a 2nd
> time) and accept. Type "ls /usr/lib/<TAB>" again and press backspace.
> It segfaults now, although backspacing worked the first time.
> 
> Maybe someone can find the reason for this? I do have EDITOR="vim" set,
> but it appears as if it happens with EDITOR="emacs" as well.
> 
> 
> Thanks!
> 
> Christian
> 

This is a guess:

menu selection requires a keymap named menuselect to function. you can view
it with ''bindkey -l''. This keymap is provided by the complist module
that you loaded initially, then sequentially deleted with ''bindkey -d''
returning the keymaps back to a default state.

The zsh/complist is loaded automatically on first use of menuselect,
which explains why ''zmodload zsh/complist'' is required for the segfault.

If my guess is true, zsh should handle the menuselect keymap not existing more elegantly.
But i wouldn't expect menuselect to be of much use without keybinds.