From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: "Ehud Karni" Newsgroups: gmane.emacs.devel Subject: Change of octal prefix character crashes Emacs [2nd time] Date: Tue, 1 Mar 2005 13:09:21 +0200 Organization: Mivtach-Simon Insurance agencies Message-ID: <200503011109.j21B9LGS007736@beta.mvs.co.il> Reply-To: ehud@unix.mvs.co.il NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-8-i Content-Transfer-Encoding: 7bit X-Trace: sea.gmane.org 1109679334 1891 80.91.229.2 (1 Mar 2005 12:15:34 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Tue, 1 Mar 2005 12:15:34 +0000 (UTC) Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Mar 01 13:15:34 2005 Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1D66HU-0007vu-6Z for ged-emacs-devel@m.gmane.org; Tue, 01 Mar 2005 13:15:17 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1D66a2-0004jr-Bq for ged-emacs-devel@m.gmane.org; Tue, 01 Mar 2005 07:34:26 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1D65yO-000741-LJ for emacs-devel@gnu.org; Tue, 01 Mar 2005 06:55:33 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1D65s0-0006CQ-KJ for emacs-devel@gnu.org; Tue, 01 Mar 2005 06:49:07 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1D65cn-0005PQ-Jw for emacs-devel@gnu.org; Tue, 01 Mar 2005 06:33:16 -0500 Original-Received: from [193.16.147.12] (helo=unix.mvs.co.il) by monty-python.gnu.org with esmtp (Exim 4.34) id 1D65Fq-0000IX-Ip for emacs-devel@gnu.org; Tue, 01 Mar 2005 06:09:31 -0500 Original-Received: from beta.mvs.co.il (beta [10.253.0.3]) by unix.mvs.co.il (8.13.0/8.13.0) with ESMTP id j21B9LEs028751 for ; Tue, 1 Mar 2005 13:09:21 +0200 Original-Received: from beta.mvs.co.il (localhost [127.0.0.1]) by beta.mvs.co.il (8.12.10/8.12.10) with ESMTP id j21B9LrU007740 for ; Tue, 1 Mar 2005 13:09:21 +0200 Original-Received: (from root@localhost) by beta.mvs.co.il (8.12.10/8.12.10/Submit) id j21B9LGS007736; Tue, 1 Mar 2005 13:09:21 +0200 Original-To: emacs-devel@gnu.org X-Mailer: Emacs 21.3.1 rmail (send-msg 1.108) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org X-MailScanner-To: ged-emacs-devel@m.gmane.org Xref: main.gmane.org gmane.emacs.devel:33968 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:33968 A few days ago (2005-02-25) I sent a report about a crash in emacs 22.0.50 with a patch that fix it. There was no response, and nobody installed it in CVS. I'm resending it, hoping someone will look at it this time. Changing the octal prefix character by setting slot 2 of the `standard-display-table' cause Emacs to crash when trying to display a character that should be displayed in octal. How to crash Emacs: 1. Add octal displayed characters, e.g. \221 \222 \223 2. Eval the following 2 lines: (setq standard-display-table (make-display-table)) (set-display-table-slot standard-display-table 2 ?!) 3. If Emacs has not crashed yet, refresh the view by ^L. The cause of the crash is a bug in `get_next_display_element' in xdisp.c . The local variable `face_id' is always used but is not set when there is no face to replacing prefix character. The patch below fix this bug. Ehud. *** /lnx1/gnu/src/emacs/src/xdisp.c.~1.986.~ Sun Feb 27 12:53:09 2005 --- /lnx1/gnu/src/emacs/src/xdisp.c Tue Mar 1 12:48:06 2005 *************** *** 5087,5097 **** display. Then, set IT->dpvec to these glyphs. */ GLYPH g; int ctl_len; ! int face_id, lface_id; GLYPH escape_glyph; if (it->c < 128 && it->ctl_arrow_p) { /* Set IT->ctl_chars[0] to the glyph for `^'. */ if (it->dp && INTEGERP (DISP_CTRL_GLYPH (it->dp)) --- 5087,5098 ---- display. Then, set IT->dpvec to these glyphs. */ GLYPH g; int ctl_len; ! int face_id, lface_id = 0 ; GLYPH escape_glyph; if (it->c < 128 && it->ctl_arrow_p) { + g = '^'; /* default glyph for Control */ /* Set IT->ctl_chars[0] to the glyph for `^'. */ if (it->dp && INTEGERP (DISP_CTRL_GLYPH (it->dp)) *************** *** 5099,5117 **** { g = XINT (DISP_CTRL_GLYPH (it->dp)); lface_id = FAST_GLYPH_FACE (g); ! if (lface_id) ! { ! g = FAST_GLYPH_CHAR (g); ! face_id = merge_faces (it->f, Qt, lface_id, ! it->face_id); ! } } else { /* Merge the escape-glyph face into the current face. */ face_id = merge_faces (it->f, Qescape_glyph, 0, it->face_id); - g = '^'; } XSETINT (it->ctl_chars[0], g); --- 5100,5117 ---- { g = XINT (DISP_CTRL_GLYPH (it->dp)); lface_id = FAST_GLYPH_FACE (g); ! } ! if (lface_id) ! { ! g = FAST_GLYPH_CHAR (g); ! face_id = merge_faces (it->f, Qt, lface_id, ! it->face_id); } else { /* Merge the escape-glyph face into the current face. */ face_id = merge_faces (it->f, Qescape_glyph, 0, it->face_id); } XSETINT (it->ctl_chars[0], g); *************** *** 5121,5145 **** goto display_control; } if (it->dp && INTEGERP (DISP_ESCAPE_GLYPH (it->dp)) && GLYPH_CHAR_VALID_P (XFASTINT (DISP_ESCAPE_GLYPH (it->dp)))) { escape_glyph = XFASTINT (DISP_ESCAPE_GLYPH (it->dp)); lface_id = FAST_GLYPH_FACE (escape_glyph); ! if (lface_id) ! { ! escape_glyph = FAST_GLYPH_CHAR (escape_glyph); ! face_id = merge_faces (it->f, Qt, lface_id, ! it->face_id); ! } } else { /* Merge the escape-glyph face into the current face. */ face_id = merge_faces (it->f, Qescape_glyph, 0, it->face_id); - escape_glyph = '\\'; } if (it->c == 0x8a0 || it->c == 0x8ad) --- 5121,5145 ---- goto display_control; } + escape_glyph = '\\'; /* default for Octal display */ if (it->dp && INTEGERP (DISP_ESCAPE_GLYPH (it->dp)) && GLYPH_CHAR_VALID_P (XFASTINT (DISP_ESCAPE_GLYPH (it->dp)))) { escape_glyph = XFASTINT (DISP_ESCAPE_GLYPH (it->dp)); lface_id = FAST_GLYPH_FACE (escape_glyph); ! } ! if (lface_id) ! { ! escape_glyph = FAST_GLYPH_CHAR (escape_glyph); ! face_id = merge_faces (it->f, Qt, lface_id, ! it->face_id); } else { /* Merge the escape-glyph face into the current face. */ face_id = merge_faces (it->f, Qescape_glyph, 0, it->face_id); } if (it->c == 0x8a0 || it->c == 0x8ad) Diff finished at Tue Mar 1 12:48:28 -- Ehud Karni Tel: +972-3-7966-561 /"\ Mivtach - Simon Fax: +972-3-7966-667 \ / ASCII Ribbon Campaign Insurance agencies (USA) voice mail and X Against HTML Mail http://www.mvs.co.il FAX: 1-815-5509341 / \ GnuPG: 98EA398D Better Safe Than Sorry