Subject: Re: bug#12050: 23.3; font trashes mode-line file name

From: [email-masked]
Date: Mon, 30 Jul 2012 04:20:11 -0400

with src/xdisp.c 22736 fix (24.1 line numbers differ by ~300 but context
is correct):

run -q -fn -adobe-times-bold-r-normal--0-0-0-0-p-0-iso8859-15
does not crash emacs but mode-line is completely undecipherable. each char
appears to have an octal representation of a char inside a rectangular box

run -q -fn -adobe-times-medium-r-normal--0-0-0-0-p-0-iso8859-15
crash at
xfaces.c:4841
4841            if (! EQ (face->font->props[i], def_face->font->props[i]))
(gdb) print def_face->font
$2 = (struct font *) 0x0

run -q -fn -adobe-helvetica-bold-r-normal--0-0-0-0-p-0-iso8859-15
crash at
xfaces.c:4841
4841            if (! EQ (face->font->props[i], def_face->font->props[i]))
(gdb) print def_face->font
$2 = (struct font *) 0x0

run -q -fn -adobe-helvetica-medium-r-normal--0-0-0-0-p-0-iso8859-15
crash at
xfaces.c:4841
4841            if (! EQ (face->font->props[i], def_face->font->props[i]))
(gdb) print def_face->font
$2 = (struct font *) 0x0

>> Date: Sun, 29 Jul 2012 07:44:16 -0400
>> From: [email-masked]
>>
>> with the gdb command
>> run -q -fn -adobe-times-bold-r-normal--0-0-0-0-p-0-iso8859-15
>> the crash occurs at xterm.c:1216
>> 1216   else if (FONT_HEIGHT (s->font) < s->height - 2 * box_line_width
>
> This is fixed in the development sources, patch below.
>
>> with the gdb command
>> run -q -fn -adobe-helvetica-bold-r-normal--0-0-0-0-p-0-iso8859-15
>> the crash occurs at xfaces.c:4841
>> 4841   if (! EQ (face->font->props[i], def_face->font->props[i]))
>
> Why does this crash? is def_face->font a NULL pointer or something?
>
>> recall that the times line crashes in 23.3 and 24.1 and the helvetica
>> line
>> works fine in 23.3 and crashes in 24.1.
>
> Note that both fonts are bold.  If you use the non-bold variant of the
> same font, does the problem go away?
>
> --- src/xdisp.c	2012-07-07 21:39:45 +0000
> +++ src/xdisp.c	2012-07-08 15:49:39 +0000
> @@ -22736,7 +22736,7 @@ fill_glyphless_glyph_string (struct glyp
>    last = s->row->glyphs[s->area] + end;
>    voffset = glyph->voffset;
>    s->face = FACE_FROM_ID (s->f, face_id);
> -  s->font = s->face->font;
> +  s->font = s->face->font ? s->face->font : FRAME_FONT (s->f);
>    s->nchars = 1;
>    s->width = glyph->pixel_width;
>    glyph++;
>
>