diff options
author | Andrea Canciani <ranma42@gmail.com> | 2010-11-23 13:24:25 +0100 |
---|---|---|
committer | Andrea Canciani <ranma42@gmail.com> | 2010-11-23 14:29:24 +0100 |
commit | e2c9964c3e1bbf253b20f3e7b747eeedcb3f56e6 (patch) | |
tree | f6da290b7f471883bb5b19f1b495f6a4f4f0d45c /src/cairo-quartz-font.c | |
parent | 8db239660fab35970784bfa3bd7e7ba0cdaf46d4 (diff) | |
download | cairo-e2c9964c3e1bbf253b20f3e7b747eeedcb3f56e6.tar.gz |
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.
Diffstat (limited to 'src/cairo-quartz-font.c')
-rw-r--r-- | src/cairo-quartz-font.c | 23 |
1 files 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; - } - - len = *length; - } else - len = CFDataGetLength (data); + if (buffer == NULL) { + *length = CFDataGetLength (data); + CFRelease (data); + return CAIRO_STATUS_SUCCESS; + } - 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; |