--- Begin Message ---
Subject: |
23.1.50; segfault when font style begins with a number |
Date: |
Fri, 26 Jun 2009 01:00:09 +0100 (added by address@hidden) |
get_adstyle_property() in ftfont.c appears to extract the first
whitespace-delimited word from a font's style string and pass it to
font_intern_prop(). When this function is called from ftfont_list()
-- at line 1028 in the current HEAD -- the return value is assumed to
be either nil or a symbol.
I have a font on my computer that has the style "55 Roman". For this
font, get_adstyle_property() winds up returning an integer instead.
ftfont_list() sticks this into SYMBOL_NAME() and promptly segfaults.
The trivial patch below prevents the crash, but I don't understand the
code well enough to tell whether it's the right solution. Maybe
ftfont_list() should be handling the integer case instead.
diff --git a/src/ftfont.c b/src/ftfont.c
index 70c1797..789e6a7 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -177,7 +177,7 @@ get_adstyle_property (FcPattern *p)
|| xstrcasecmp (str, "Oblique") == 0
|| xstrcasecmp (str, "Italic") == 0)
return Qnil;
- adstyle = font_intern_prop (str, end - str, 0);
+ adstyle = font_intern_prop (str, end - str, 1);
if (font_style_to_value (FONT_WIDTH_INDEX, adstyle, 0) >= 0)
return Qnil;
return adstyle;
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#3682: 23.1.50; segfault when font style begins with a number |
Date: |
Fri, 26 Jun 2009 15:17:48 +0900 |
In article <4A20329601B7D2EF@> (added by postmaster@woodbine.london.02.net),
Peter Jolly <peter@jollys.org> writes:
> get_adstyle_property() in ftfont.c appears to extract the first
> whitespace-delimited word from a font's style string and pass it to
> font_intern_prop(). When this function is called from ftfont_list()
> -- at line 1028 in the current HEAD -- the return value is assumed to
> be either nil or a symbol.
> I have a font on my computer that has the style "55 Roman". For this
> font, get_adstyle_property() winds up returning an integer instead.
> ftfont_list() sticks this into SYMBOL_NAME() and promptly segfaults.
> The trivial patch below prevents the crash, but I don't understand the
> code well enough to tell whether it's the right solution. Maybe
> ftfont_list() should be handling the integer case instead.
Thank you for the report. Your patch is correct. I've just
installed it to EMACS_23_1_RC and trunk.
---
Kenichi Handa
handa@m17n.org
> diff --git a/src/ftfont.c b/src/ftfont.c
> index 70c1797..789e6a7 100644
> --- a/src/ftfont.c
> +++ b/src/ftfont.c
> @@ -177,7 +177,7 @@ get_adstyle_property (FcPattern *p)
> || xstrcasecmp (str, "Oblique") == 0
> || xstrcasecmp (str, "Italic") == 0)
> return Qnil;
> - adstyle = font_intern_prop (str, end - str, 0);
> + adstyle = font_intern_prop (str, end - str, 1);
> if (font_style_to_value (FONT_WIDTH_INDEX, adstyle, 0) >= 0)
> return Qnil;
> return adstyle;
--- End Message ---