diff options
author | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2008-12-10 22:19:25 +0000 |
---|---|---|
committer | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2008-12-10 22:19:25 +0000 |
commit | db62712b425afcedf4a588aa0159f0072569f89b (patch) | |
tree | 15d3c5f59fdc6c4f18dd8339e23221334e18f773 | |
parent | 5ebcc81e61fc933a1857bcdb9f492005b2b1bdeb (diff) | |
download | classpath-db62712b425afcedf4a588aa0159f0072569f89b.tar.gz |
PR38473: Prevent segmentation fault with bitmap fonts.
2008-12-09 Andrew John Hughes <gnu_andrew@member.fsf.org>
PR classpath/38473:
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c:
(Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphOutlineNative):
Check that the glyph is an outline before calling
FT_Outline_Decompose.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c | 18 |
2 files changed, 24 insertions, 2 deletions
@@ -1,3 +1,11 @@ +2008-12-09 Andrew John Hughes <gnu_andrew@member.fsf.org> + + PR classpath/38473: + * native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c: + (Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphOutlineNative): + Check that the glyph is an outline before calling + FT_Outline_Decompose. + 2008-11-16 Andrew John Hughes <gnu_andrew@member.fsf.org> * gnu/xml/transform/Bindings.java: diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c index d1370bdc1..bc3beeb77 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c @@ -385,8 +385,22 @@ Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphOutlineNative } FT_Get_Glyph( ft_face->glyph, &glyph ); - FT_Outline_Decompose (&(((FT_OutlineGlyph)glyph)->outline), - &ftCallbacks, path); + if (glyph->format == FT_GLYPH_FORMAT_OUTLINE) + { + FT_Outline_Decompose (&(((FT_OutlineGlyph)glyph)->outline), + &ftCallbacks, path); + } + else + { + char format[4]; + + format[0] = (glyph->format & 0xFF000000) >> 24; + format[1] = (glyph->format & 0x00FF0000) >> 16; + format[2] = (glyph->format & 0x0000FF00) >> 8; + format[3] = (glyph->format & 0x000000FF); + printf("WARNING: Unable to create outline for font %s %s of format %s\n", + ft_face->family_name, ft_face->style_name, format); + } FT_Done_Glyph( glyph ); pango_fc_font_unlock_face( font ); |