From e2c9964c3e1bbf253b20f3e7b747eeedcb3f56e6 Mon Sep 17 00:00:00 2001 From: Andrea Canciani Date: Tue, 23 Nov 2010 13:24:25 +0100 Subject: [PATCH] quartz-font: Implement new load_truetype_table semantics fb0304e2a9c99fa00e68bf4b37074a6885f19cff changed and specified the behavior of load_truetype_table. This commit makes quartz-font implement the new behavior. --- src/cairo-quartz-font.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/cairo-quartz-font.c b/src/cairo-quartz-font.c index da9d2ae34..75dda025f 100644 --- a/src/cairo-quartz-font.c +++ b/src/cairo-quartz-font.c @@ -767,7 +767,6 @@ _cairo_quartz_load_truetype_table (void *abstract_font, { cairo_quartz_font_face_t *font_face = _cairo_quartz_scaled_to_face (abstract_font); CFDataRef data = NULL; - CFIndex len; if (likely (CGFontCopyTableForTagPtr)) data = CGFontCopyTableForTagPtr (font_face->cgFont, tag); @@ -775,20 +774,18 @@ _cairo_quartz_load_truetype_table (void *abstract_font, if (!data) return CAIRO_INT_STATUS_UNSUPPORTED; - if (length) { - if (*length == 0) { - *length = CFDataGetLength (data); - CFRelease (data); - return CAIRO_STATUS_SUCCESS; - } + if (buffer == NULL) { + *length = CFDataGetLength (data); + CFRelease (data); + return CAIRO_STATUS_SUCCESS; + } - len = *length; - } else - len = CFDataGetLength (data); - - if (buffer) - CFDataGetBytes (data, CFRangeMake (offset, len), buffer); + if (CFDataGetLength (data) < offset + (long) *length) { + CFRelease (data); + return CAIRO_INT_STATUS_UNSUPPORTED; + } + CFDataGetBytes (data, CFRangeMake (offset, *length), buffer); CFRelease (data); return CAIRO_STATUS_SUCCESS;