From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28159 invoked from network); 22 Oct 2007 10:12:43 -0000 X-Spam-Checker-Version: SpamAssassin 3.2.3 (2007-08-08) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.2.3 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 22 Oct 2007 10:12:43 -0000 Received-SPF: none (ns1.primenet.com.au: domain at sunsite.dk does not designate permitted sender hosts) Received: (qmail 99980 invoked from network); 22 Oct 2007 10:12:33 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 22 Oct 2007 10:12:33 -0000 Received: (qmail 29267 invoked by alias); 22 Oct 2007 10:12:30 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 24007 Received: (qmail 29250 invoked from network); 22 Oct 2007 10:12:30 -0000 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by sunsite.dk with SMTP; 22 Oct 2007 10:12:30 -0000 Received: (qmail 99660 invoked from network); 22 Oct 2007 10:12:30 -0000 Received: from cluster-d.mailcontrol.com (217.69.20.190) by a.mx.sunsite.dk with SMTP; 22 Oct 2007 10:12:23 -0000 Received: from cameurexb01.EUROPE.ROOT.PRI ([62.189.241.200]) by rly26d.srv.mailcontrol.com (MailControl) with ESMTP id l9MAAJeI016596 for ; Mon, 22 Oct 2007 11:12:21 +0100 Received: from news01.csr.com ([10.103.143.38]) by cameurexb01.EUROPE.ROOT.PRI with Microsoft SMTPSVC(6.0.3790.1830); Mon, 22 Oct 2007 11:10:56 +0100 Received: from news01.csr.com (localhost.localdomain [127.0.0.1]) by news01.csr.com (8.14.1/8.13.4) with ESMTP id l9MAAuaT005612 for ; Mon, 22 Oct 2007 11:10:56 +0100 Received: from csr.com (pws@localhost) by news01.csr.com (8.14.1/8.14.1/Submit) with ESMTP id l9MAAuLw005609 for ; Mon, 22 Oct 2007 11:10:56 +0100 Message-Id: <200710221010.l9MAAuLw005609@news01.csr.com> X-Authentication-Warning: news01.csr.com: pws owned process doing -bs To: zsh-workers@sunsite.dk Subject: Re: zsh 4.3.4 crashes in prompt-related code under Mac OS X In-reply-to: <20071020025428.GR1777@prunille.vinc17.org> References: <20070830085711.GH27290@prunille.vinc17.org> <20070830161227.5d66764a@news01.csr.com> <20071020025428.GR1777@prunille.vinc17.org> Comments: In-reply-to Vincent Lefevre message dated "Sat, 20 Oct 2007 04:54:28 +0200." Date: Mon, 22 Oct 2007 11:10:55 +0100 From: Peter Stephenson X-OriginalArrivalTime: 22 Oct 2007 10:10:56.0449 (UTC) FILETIME=[D614BB10:01C81493] X-Scanned-By: MailControl A-07-08-10 (www.mailcontrol.com) on 10.68.0.136 Vincent Lefevre wrote: > If I understand correctly, the crash occurs here in preprompt(): > > /* The PROMPT_SP heuristic will move the prompt down to a new line > * if there was any dangling output on the line (assuming the termina > l > * has automatic margins, but we try even if hasam isn't set). */ > char *str; > int percents = opts[PROMPTPERCENT]; > opts[PROMPTPERCENT] = 1; > str = promptexpand("%B%S%#%s%b", 0, NULL, NULL); > opts[PROMPTPERCENT] = percents; > fprintf(shout, "%s%*s\r", str, (int)columns - 1 - !hasxn, ""); > free(str); > ^^^^ Thanks for looking... The obvious cause is some allocation error in promptexpand(). However, I can't see any sign of it. We allocate 256 bytes initially, which is bound to be enough for the string being expanded there. (I see one thing that worried me a bit that I've fixed but I don't think that can possibly be related.) The only other possibility I can see locally is that (columns - 1 - !hasxn) is returning a negative width that's having a bad effect, but it should simply change the effect of the alignment. Or maybe "shout" has got into some unusable state. I suppose it's not unreasonable to test it's not NULL, although it's rather paranoid. Otherwise it's presumably a knock-on effect from some other part of the code. Index: Src/prompt.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/prompt.c,v retrieving revision 1.42 diff -u -r1.42 prompt.c --- Src/prompt.c 21 Sep 2006 16:36:53 -0000 1.42 +++ Src/prompt.c 22 Oct 2007 10:09:40 -0000 @@ -181,10 +181,10 @@ bp1 = NULL; truncwidth = 0; putpromptchar(1, '\0'); - addbufspc(1); + addbufspc(2); if(dontcount) *bp++ = Outpar; - *bp = 0; + *bp = '\0'; if (!ns) { /* If zero, Inpar, Outpar and Nularg should be removed. */ for (bp = buf; *bp; ) { Index: Src/utils.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/utils.c,v retrieving revision 1.167 diff -u -r1.167 utils.c --- Src/utils.c 5 Sep 2007 16:16:17 -0000 1.167 +++ Src/utils.c 22 Oct 2007 10:09:41 -0000 @@ -1160,7 +1160,7 @@ int period = getiparam("PERIOD"); int mailcheck = getiparam("MAILCHECK"); - if (isset(PROMPTSP) && isset(PROMPTCR) && !use_exit_printed) { + if (isset(PROMPTSP) && isset(PROMPTCR) && !use_exit_printed && shout) { /* The PROMPT_SP heuristic will move the prompt down to a new line * if there was any dangling output on the line (assuming the terminal * has automatic margins, but we try even if hasam isn't set). @@ -1284,7 +1284,7 @@ checkmailpath(arr); popheap(); } - } else { + } else if (shout) { if (st.st_size && st.st_atime <= st.st_mtime && st.st_mtime > lastmailcheck) { if (!u) { @@ -2302,7 +2302,7 @@ if (ask) { if (noquery(0)) { x = 'n'; - } else { + } else if (shout) { char *pptbuf; pptbuf = promptexpand(sprompt, 0, best, guess); zputs(pptbuf, shout); -- Peter Stephenson Software Engineer CSR PLC, Churchill House, Cambridge Business Park, Cowley Road Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070