Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: segfault in tab-completion menu if terminal is only one line tall

On Jan 18,  1:37am, Axel Beckert wrote:
} 1. Open terminal emulator
} 2. Resize window so that there's only one line for the shell (i.e.
} where the prompt also is).
} 3. Enter: ls <tab><tab> (that is, begin typing the 'ls' command, then
} press tabulator twice to tab complete.)

I was able to reproduce if I start zsh in an 80x1 terminal emulator, but
not after resizing a larger terminal where zsh is already running down
to 1 line.  Possibly something is getting initialized differently in the
two cases.

Other strange things happen if I size the window down to 1 line, try a
completion, and then stretch back to a larger size again; e.g., repainting
the prompt above the select menu doesn't work properly.

} zstyle ':completion:*' menu select=long-list select=0
} zstyle ':completion:*' select-prompt '%SScrolling active - %l%s'

Yes, those are necessary (or at least the first one is) because the crash
occurs in the zsh/complist module which is used for "menu select=long".

The following patch stops the crash I was able to reproduce, but there
may be other ways to tickle it in different circumstances.  This might
also fix the prompt redisplay problem I mentioned above, but I'm not
confident of my steps to reproduce that one.

diff --git a/Src/Zle/complist.c b/Src/Zle/complist.c
index bcf3561..b852ee9 100644
--- a/Src/Zle/complist.c
+++ b/Src/Zle/complist.c
@@ -2500,7 +2500,7 @@ domenuselect(Hookdef dummy, Chdata dat)
-	if ((space = zterm_lines - pl - mhasstat))
+	if ((space = zterm_lines - pl - mhasstat) > 0)
 	    while (mline >= mlbeg + space)
 		if ((mlbeg += step) + space > mlines)
 		    mlbeg = mlines - space;

Barton E. Schaefer

Messages sorted by: Reverse Date, Date, Thread, Author