Subject: bug#9496: 24.0.50; Segfault on TAB-only composition

From: Eli Zaretskii <[email-masked]>
Date: Wed, 14 Sep 2011 01:33:39 -0400

> From: Johan Bockgård <[email-masked]>
> Date: Tue, 13 Sep 2011 22:22:14 +0200
> 
> 
> (insert (compose-string "\t"))
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0x00000000004d45d4 in x_set_glyph_string_gc (s=0x7fffffffae80) at xterm.c:1061
> 1061      PREPARE_FACE_FOR_DISPLAY (s->f, s->face);
> (gdb) bt
> #0  0x00000000004d45d4 in x_set_glyph_string_gc (s=0x7fffffffae80)
>     at xterm.c:1061
> #1  x_draw_glyph_string (s=0x7fffffffae80) at xterm.c:2683
> 
> This problem is not new, but due to other changes it now makes
> `describe-char' (C-u C-x =) crash when executed on a tab character.
> 
> 
> 2011-09-13  Johan Bockgård  <[email-masked]>
> 
> 	* xdisp.c (fill_composite_glyph_string): Always set s->face, to
> 	avoid a crash.

Thanks.  But why not use the value of face_id computed in the loop
above the locus of your patch (which does that for any character but
the TAB)?

Anyway, there's some magic about the TAB character and compositions
that I always wondered about.  Perhaps it's time to find out why
composition-related code tests characters against the TAB in so many
places.  Handa-san, can you tell why, please?