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

PATCH: 3.0.6-pre-4: Sneaky history bug



Start with an empty history, as with "zsh -f" or a non-login shell, and
then try to do a "quick substitution" on the nonexistent previous command
using the second character in $histchars (usually '^').  I found myself
in hend() with chwordpos == -2, which did all sorts of fun things when
memcpy was called with chwordpos * sizeof(short) as its third parameter.

I think only Wayne really knows what's going on in the code below, but
this patch at least seems to prevent zsh committing hara-kiri.  You end
up with an empty entry in the history, though.

Index: Src/hist.c
===================================================================
@@ -719,7 +719,7 @@
 	}
 #endif
 	/* get rid of pesky \n which we've already nulled out */
-	if (!chline[chwords[chwordpos-2]])
+	if (chwordpos > 1 && !chline[chwords[chwordpos-2]])
 	    chwordpos -= 2;
 	/* strip superfluous blanks, if desired */
 	if (isset(HISTREDUCEBLANKS))

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com



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