summaryrefslogtreecommitdiff
path: root/src/cairo-quartz-font.c
diff options
context:
space:
mode:
authorAndrea Canciani <ranma42@gmail.com>2010-11-23 13:24:25 +0100
committerAndrea Canciani <ranma42@gmail.com>2010-11-23 14:29:24 +0100
commite2c9964c3e1bbf253b20f3e7b747eeedcb3f56e6 (patch)
treef6da290b7f471883bb5b19f1b495f6a4f4f0d45c /src/cairo-quartz-font.c
parent8db239660fab35970784bfa3bd7e7ba0cdaf46d4 (diff)
downloadcairo-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.c23
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;