diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2007-10-04 15:46:13 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2007-10-04 15:46:13 +0100 |
commit | 4b81eeb20ebe070692ef8099c00de3829da8bf69 (patch) | |
tree | e2c52d5ac9df7556920c06165739585efe94c5fd /src/cairo-scaled-font.c | |
parent | d0b1308cd73a6b3602e5414abf03a3bdf8d2d001 (diff) |
[cairo-scaled-font] Destroy the mask on the error path.
Do not leak the mask if we encounter an error whilst tracing.
Diffstat (limited to 'src/cairo-scaled-font.c')
-rw-r--r-- | src/cairo-scaled-font.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/cairo-scaled-font.c b/src/cairo-scaled-font.c index d506e930..aec958a0 100644 --- a/src/cairo-scaled-font.c +++ b/src/cairo-scaled-font.c @@ -1381,12 +1381,15 @@ _trace_mask_to_path (cairo_image_surface_t *mask, double xoff, yoff; if (mask->format == CAIRO_FORMAT_A1) - a1_mask = mask; + a1_mask = (cairo_image_surface_t *) cairo_surface_reference (&mask->base); else a1_mask = _cairo_image_surface_clone (mask, CAIRO_FORMAT_A1); - if (cairo_surface_status (&a1_mask->base)) - return cairo_surface_status (&a1_mask->base); + status = cairo_surface_status (&a1_mask->base); + if (status) { + cairo_surface_destroy (&a1_mask->base); + return status; + } cairo_surface_get_device_offset (&mask->base, &xoff, &yoff); @@ -1399,16 +1402,16 @@ _trace_mask_to_path (cairo_image_surface_t *mask, status = _add_unit_rectangle_to_path (path, x - xoff, y - yoff); if (status) - return status; + goto BAIL; } } } } - if (a1_mask != mask) - cairo_surface_destroy (&a1_mask->base); +BAIL: + cairo_surface_destroy (&a1_mask->base); - return CAIRO_STATUS_SUCCESS; + return status; } cairo_status_t |