bug#3499: 23.0.94; Assuming strsignal unibyte is wrong and leads to Emacs crashes

Dmitry Dzhus <[email protected]>
Newsgroups gmane.emacs.bugs,gmane.emacs.pretest.bugs
Message-ID <[email protected]>
The `strsignal(SIGNUM)' function from libc returns a pointer to a string
containing a message describing the signal SIGNUM.

Emacs `status_message' function from `src/process.c' attempts to
downcase the initial character of this string to print it in the echo
area:

    signame = strsignal (code);
    string = build_string (signame);
    SSET (string, 0, DOWNCASE (SREF (string, 0)));

As it has already been discussed in bug #778, using SSET/SREF is
incorrect when `string' is multibyte, which is the case for certain
locales like ru_RU.UTF-8. A patch similar to one proposed by Kenichi
Handa for bug #778 fixes this problem, too. The patch is attached.


To reproduce the crash caused by this problem, it's sufficient to call
`recompile' when the compilation buffer has running process inside
(which sometimes occurs when compiling TeX documents, for example). I've
attached the GDB backtrace; the top of the stack gave me the hint that
this problem is nearly the same as in bug #778.


The rest of this message contains information about my Emacs
installation.

In GNU Emacs 23.0.94.1 (i686-pc-linux-gnu, GTK+ Version 2.14.7) of
 2009-05-29 on blizzard
 
Windowing system distributor `The X.Org Foundation', version
11.0.10503000

configured using `configure '--prefix=/usr' '--host=i686-pc-linux-gnu'
'--mandir=/usr/share/man' '--infodir=/usr/share/info'
'--datadir=/usr/share' '--sysconfdir=/etc' '--localstatedir=/var/lib'
'--program-suffix=-emacs-23' '--infodir=/usr/share/info/emacs-23'
'--with-sound' '--with-x' '--with-toolkit-scroll-bars' '--with-gif'
'--with-jpeg' '--with-png' '--with-rsvg' '--with-tiff' '--with-xpm'
'--with-xft' '--without-libotf' '--without-m17n-flt'
'--with-x-toolkit=gtk' '--without-hesiod' '--without-kerberos'
'--without-kerberos5' '--with-gpm' '--with-dbus'
'--build=i686-pc-linux-gnu' 'build_alias=i686-pc-linux-gnu'
'host_alias=i686-pc-linux-gnu' 'CFLAGS=-O2 -march=native -pipe'
'LDFLAGS=-Wl,-O1''

Important settings:
  value of $LC_ALL: 
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: C
  value of $LC_TIME: nil
  value of $LANG: ru_RU.UTF-8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default-enable-multibyte-characters: t
-- 
Happy Hacking.

http://sphinx.net.ru
む
process-status-message-fix-multibyte.diff (text/x-patch, 811 B)
*** process.c.~1.584.~	2009-05-02 15:54:45.000000000 +0400
--- process.c	2009-06-08 21:00:15.000000000 +0400
***************
*** 470,476 ****
  	signame = "unknown";
        string = build_string (signame);
        string2 = build_string (coredump ? " (core dumped)\n" : "\n");
!       SSET (string, 0, DOWNCASE (SREF (string, 0)));
        return concat2 (string, string2);
      }
    else if (EQ (symbol, Qexit))
--- 470,483 ----
  	signame = "unknown";
        string = build_string (signame);
        string2 = build_string (coredump ? " (core dumped)\n" : "\n");
! 
!       {
!         int c;
! 
!         c = STRING_CHAR ((char *) SDATA (string), 0);
!         Faset (string, 0, make_number (DOWNCASE (c)));
!       }
! 
        return concat2 (string, string2);
      }
    else if (EQ (symbol, Qexit))
gdb-backtrace (application/octet-stream, 4.6 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.