Date: Wed, 18 Feb 2009 22:14:43 +0100 From: Szalai Andras <szalai.bandi@gmail.com> To: FreeBSD-gnats-submit@FreeBSD.org Subject: ports/131857: [patch] devel/libslang2 line drawing characters bug Message-ID: <20090218211443.GA6476@tristania.kispest.home> Resent-Message-ID: <200902182150.n1ILo0x4009876@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 131857 >Category: ports >Synopsis: [patch] devel/libslang2 line drawing characters bug >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Feb 18 21:50:00 UTC 2009 >Closed-Date: >Last-Modified: >Originator: Szalai Andras >Release: FreeBSD 7.1-RELEASE-p1 i386 >Organization: none >Environment: System: FreeBSD tristania.kispest.home 7.1-RELEASE-p1 FreeBSD 7.1-RELEASE-p1 #0: Sun Jan 11 17:34:03 CET 2009 root@tristania.kispest.home:/disk/ad8p5/root.usr/src/sys/i386/compile/TRISTANIA i386 Relevant package versions: mc-4.6.2 libslang2-2.1.4 >Description: If you execute an application (e.g. mc), which uses devel/libslang2 to do screen I/O on a non-unicode terminal then the line drawing characters will appear as spaces. >How-To-Repeat: $ export LANG=en_US.ISO8859-1 $ mc >Fix: I have tracked the problem down to a bug in the slang2 library. In the file src/sldisply.c there is a function named tt_tgetstr which reads out capability strings from termcap. This function calls ncurses' tgetstr which does the real work, however the buffer for the capability string is a local variable (which will be filled by tgetstr). But in case of the "ac" capability, tt_tgetstr returns with the address of this buffer, and therefore it will point to an invalid address. The attached patch solves this isssue. --- src.diff begins here --- diff -ru orig/src/sldisply.c new/src/sldisply.c --- orig/src/sldisply.c 2008-08-25 02:20:40.000000000 +0200 +++ new/src/sldisply.c 2009-02-15 16:58:30.000000000 +0100 @@ -2229,14 +2229,6 @@ s = _pSLtt_tigetstr (Terminfo, cap); #endif - /* Do not strip pad info for alternate character set. I need to make - * this more general. - */ - /* FIXME: Priority=low; */ - if (0 == strcmp (cap, "ac")) - return s; - - s = fixup_tgetstr (s); #ifdef USE_TERMCAP if ((s >= area_buf) && (s < area_buf + sizeof(area_buf))) { @@ -2249,6 +2241,15 @@ s = SLmake_string (s); } #endif + + /* Do not strip pad info for alternate character set. I need to make + * this more general. + */ + /* FIXME: Priority=low; */ + if (0 == strcmp (cap, "ac")) + return s; + + s = fixup_tgetstr (s); return s; } --- src.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090218211443.GA6476>