From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15237 invoked by alias); 2 Aug 2010 03:58:39 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 28112 Received: (qmail 14257 invoked from network); 2 Aug 2010 03:58:37 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, T_TVD_MIME_NO_HEADERS autolearn=ham version=3.3.1 Received-SPF: none (ns1.primenet.com.au: domain at unixuser.org does not designate permitted sender hosts) Message-ID: From: Daiki Ueno To: zsh-workers@zsh.org Subject: PATCH: fix line-length calculation in zle_refresh.c:singlerefresh() Date: Mon, 02 Aug 2010 12:49:01 +0900 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi, If multibyte support is enabled and TERM is dumb, typing double-width characters causes segmentation fault: ueno@localhost % LANG=3Den_US.utf8 TERM=3Ddumb zsh -f localhost% <-- type =E3=81=82 with some input method *** glibc detected *** zsh: free(): invalid next size (fast): 0x00000000018= dd500 *** zsh: abort (core dumped) LANG=3Den_US.utf8 TERM=3Ddumb zsh -f This is because zle_refresh.c:singlerefresh() does not calculate the size of new line buffer correctly. Here is a patch for this. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-Fix-line-length-calculation-in-zle_refresh.patch >>From 9f9268512c0ab717e67d9e6881d44dd1cdaa37b2 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Mon, 2 Aug 2010 12:37:41 +0900 Subject: [PATCH] Fix line-length calculation in zle_refresh. --- Src/Zle/zle_refresh.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c index 352dcf0..f03e7dc 100644 --- a/Src/Zle/zle_refresh.c +++ b/Src/Zle/zle_refresh.c @@ -2341,7 +2341,7 @@ singlerefresh(ZLE_STRING_T tmpline, int tmpll, int tmpcs) if (tmpline[t0] == ZWC('\t')) vsiz = (vsiz | 7) + 2; #ifdef MULTIBYTE_SUPPORT - else if (iswprint(tmpline[t0]) && (width = WCWIDTH(tmpline[t0]) > 0)) { + else if (iswprint(tmpline[t0]) && ((width = WCWIDTH(tmpline[t0])) > 0)) { vsiz += width; if (isset(COMBININGCHARS) && IS_BASECHAR(tmpline[t0])) { while (t0 < tmpll-1 && IS_COMBINING(tmpline[t0+1])) -- 1.7.2 Regards, -- Daiki Ueno --=-=-=--