commit a425d33fc679daafd8fa560f8dc22eddf6b03990 Author: Brian Ewins Date: Sat Jan 20 13:21:48 2007 +0000 [ATSUI] out-of-range glyphs should be treated as deleted. Glyphs outside the range 0x0-0xffff are not valid in atsui, but scaled_glyph stores unsigned long. Ensure that invalid values do not cause errors. diff --git a/src/cairo-atsui-font.c b/src/cairo-atsui-font.c index 130dfda..980eb5b 100644 --- a/src/cairo-atsui-font.c +++ b/src/cairo-atsui-font.c @@ -506,6 +506,14 @@ OSStatus _close_path_for_metrics(void *callback_data) return noErr; } +static GlyphID +_cairo_atsui_scaled_glyph_index (cairo_scaled_glyph_t *scaled_glyph) { + unsigned long index = _cairo_scaled_glyph_index (scaled_glyph); + if (index > 0xffff) + return kATSDeletedGlyphcode; + return index; +} + static cairo_status_t _cairo_atsui_font_init_glyph_metrics (cairo_atsui_font_t *scaled_font, cairo_scaled_glyph_t *scaled_glyph) @@ -518,7 +526,7 @@ _cairo_atsui_font_init_glyph_metrics (cairo_atsui_font_t *scaled_font, static ATSCubicCurveToUPP curveProc = NULL; static ATSCubicClosePathUPP closePathProc = NULL; CGMutablePathRef path; - GlyphID theGlyph = _cairo_scaled_glyph_index (scaled_glyph); + GlyphID theGlyph = _cairo_atsui_scaled_glyph_index (scaled_glyph); CGPoint device_advance, font_advance; CGRect rect; @@ -670,7 +678,7 @@ _cairo_atsui_scaled_font_init_glyph_path (cairo_atsui_font_t *scaled_font, static ATSCubicLineToUPP lineProc = NULL; static ATSCubicCurveToUPP curveProc = NULL; static ATSCubicClosePathUPP closePathProc = NULL; - GlyphID theGlyph = _cairo_scaled_glyph_index (scaled_glyph); + GlyphID theGlyph = _cairo_atsui_scaled_glyph_index (scaled_glyph); OSStatus err; cairo_atsui_scaled_path_t scaled_path; cairo_matrix_t *font_to_device = &scaled_font->base.scale; @@ -734,7 +742,7 @@ _cairo_atsui_scaled_font_init_glyph_surface (cairo_atsui_font_t *scaled_font, cairo_scaled_font_t base = scaled_font->base; cairo_font_extents_t extents = base.extents; - GlyphID theGlyph = _cairo_scaled_glyph_index (scaled_glyph); + GlyphID theGlyph = _cairo_atsui_scaled_glyph_index (scaled_glyph); ATSGlyphScreenMetrics metricsH; double left, bottom; CGRect bbox;