Subject: 23.0.94; Assuming strsignal unibyte is wrong and leads to Emacs crashes
From: Dmitry Dzhus <[email-masked]>
To: [email-masked]
Cc: [email-masked]
Date: Mon, 08 Jun 2009 21:02:36 +0400

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.

*** 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))

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
む