summaryrefslogtreecommitdiff
path: root/src/cairo-scaled-font.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2007-10-04 15:46:13 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2007-10-04 15:46:13 +0100
commit4b81eeb20ebe070692ef8099c00de3829da8bf69 (patch)
treee2c52d5ac9df7556920c06165739585efe94c5fd /src/cairo-scaled-font.c
parentd0b1308cd73a6b3602e5414abf03a3bdf8d2d001 (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.c17
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