diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2007-05-10 17:17:30 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2007-05-10 17:18:27 +0100 |
commit | ab6a767cf476c98b466c62dd410d0f61f8dd6bbb (patch) | |
tree | 62f92fdda9030b11d62281df87bcb66865a584e5 | |
parent | aec92188f1cf4ca34e890b0a4266425532f669d4 (diff) |
[cairo-scaled-font] Check for allocation failure.
cairo_scaled_font_create() returns a nil object on failure whereas a few
callers were checking for NULL.
Secondly review the public entry points for cairo_scaled_font_*() to
ensure that all check that they will not attempt to overwrite the
read-only nil object.
-rw-r--r-- | src/cairo-gstate.c | 7 | ||||
-rw-r--r-- | src/cairo-scaled-font-subsets.c | 2 | ||||
-rw-r--r-- | src/cairo-scaled-font.c | 10 | ||||
-rw-r--r-- | src/cairo-type1-fallback.c | 2 |
4 files changed, 14 insertions, 7 deletions
diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c index 3787aebc9..ad560cd8a 100644 --- a/src/cairo-gstate.c +++ b/src/cairo-gstate.c @@ -1464,11 +1464,10 @@ _cairo_gstate_ensure_scaled_font (cairo_gstate_t *gstate) &gstate->font_matrix, &gstate->ctm, &options); - if (gstate->scaled_font == NULL) - return CAIRO_STATUS_NO_MEMORY; - if (cairo_scaled_font_status (gstate->scaled_font)) - return cairo_scaled_font_status (gstate->scaled_font); + status = cairo_scaled_font_status (gstate->scaled_font); + if (status) + return status; return CAIRO_STATUS_SUCCESS; } diff --git a/src/cairo-scaled-font-subsets.c b/src/cairo-scaled-font-subsets.c index fa5a8b423..3489ee6be 100644 --- a/src/cairo-scaled-font-subsets.c +++ b/src/cairo-scaled-font-subsets.c @@ -531,6 +531,8 @@ _cairo_scaled_font_subsets_map_glyph (cairo_scaled_font_subsets_t *subsets, &identity, &identity, &font_options); + if (unscaled_font->status) + return unscaled_font->status; subset_glyph->is_scaled = FALSE; type1_font = FALSE; diff --git a/src/cairo-scaled-font.c b/src/cairo-scaled-font.c index d6726b35d..40ff6988e 100644 --- a/src/cairo-scaled-font.c +++ b/src/cairo-scaled-font.c @@ -135,6 +135,9 @@ _cairo_scaled_font_set_error (cairo_scaled_font_t *scaled_font, cairo_font_type_t cairo_scaled_font_get_type (cairo_scaled_font_t *scaled_font) { + if (scaled_font->ref_count == CAIRO_REF_COUNT_INVALID) + return CAIRO_FONT_TYPE_TOY; + return scaled_font->backend->type; } @@ -770,10 +773,13 @@ cairo_scaled_font_text_extents (cairo_scaled_font_t *scaled_font, const char *utf8, cairo_text_extents_t *extents) { - cairo_status_t status = CAIRO_STATUS_SUCCESS; + cairo_status_t status; cairo_glyph_t *glyphs; int num_glyphs; + if (scaled_font->status) + return; + status = _cairo_scaled_font_text_to_glyphs (scaled_font, 0., 0., utf8, &glyphs, &num_glyphs); if (status) { _cairo_scaled_font_set_error (scaled_font, status); @@ -807,7 +813,7 @@ cairo_scaled_font_glyph_extents (cairo_scaled_font_t *scaled_font, int num_glyphs, cairo_text_extents_t *extents) { - cairo_status_t status = CAIRO_STATUS_SUCCESS; + cairo_status_t status; int i; double min_x = 0.0, min_y = 0.0, max_x = 0.0, max_y = 0.0; cairo_bool_t visible = FALSE; diff --git a/src/cairo-type1-fallback.c b/src/cairo-type1-fallback.c index 3a0bd1249..387277785 100644 --- a/src/cairo-type1-fallback.c +++ b/src/cairo-type1-fallback.c @@ -106,7 +106,7 @@ cairo_type1_font_create (cairo_scaled_font_subset_t *scaled_font_subset, &font_matrix, &ctm, &font_options); - if (font->type1_scaled_font == NULL) + if (font->type1_scaled_font->status) goto fail; _cairo_array_init (&font->contents, sizeof (unsigned char)); |