summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew John Hughes <gnu_andrew@member.fsf.org>2008-12-10 22:19:25 +0000
committerAndrew John Hughes <gnu_andrew@member.fsf.org>2008-12-10 22:19:25 +0000
commitdb62712b425afcedf4a588aa0159f0072569f89b (patch)
tree15d3c5f59fdc6c4f18dd8339e23221334e18f773
parent5ebcc81e61fc933a1857bcdb9f492005b2b1bdeb (diff)
downloadclasspath-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--ChangeLog8
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c18
2 files changed, 24 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 5ff6fa9d8..51450e32c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 );