diff options
author | Emmanuel Pacaud <emmanuel.pacaud@free.fr> | 2006-05-01 22:52:47 +0200 |
---|---|---|
committer | Emmanuel Pacaud <emmanuel.pacaud@free.fr> | 2006-05-01 22:52:47 +0200 |
commit | 22c799d5b3cae2a98ab927b2b38911ac89cac61e (patch) | |
tree | 7b8c182e42fcf978268b8d0b30338f1cb0482d92 | |
parent | 6f49f7b76d69c185d6f97e50d8a57914a9a9fca1 (diff) |
SVG: Fix error handling in create_for_document and in composite_image_pattern.
-rw-r--r-- | src/cairo-svg-surface.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/cairo-svg-surface.c b/src/cairo-svg-surface.c index aa437e5fc..932b86e79 100644 --- a/src/cairo-svg-surface.c +++ b/src/cairo-svg-surface.c @@ -127,7 +127,7 @@ _cairo_svg_document_destroy (cairo_svg_document_t *document); static cairo_status_t _cairo_svg_document_finish (cairo_svg_document_t *document); -static void +static cairo_svg_document_t * _cairo_svg_document_reference (cairo_svg_document_t *document); static cairo_surface_t * @@ -407,16 +407,17 @@ _cairo_svg_surface_create_for_document (cairo_svg_document_t *document, char buffer[CAIRO_SVG_DTOSTR_BUFFER_LEN]; surface = malloc (sizeof (cairo_svg_surface_t)); - if (surface == NULL) - return NULL; + if (surface == NULL) { + _cairo_error (CAIRO_STATUS_NO_MEMORY); + return (cairo_surface_t*) &_cairo_surface_nil; + } _cairo_surface_init (&surface->base, &cairo_svg_surface_backend); surface->width = width; surface->height = height; - _cairo_svg_document_reference (document); - surface->document = document; + surface->document = _cairo_svg_document_reference (document); surface->clip_level = 0; @@ -681,7 +682,7 @@ emit_composite_image_pattern (xmlNodePtr node, cairo_image_surface_t *image; cairo_status_t status; cairo_matrix_t p2u; - xmlNodePtr child; + xmlNodePtr child = NULL; xmlBufferPtr image_buffer; char buffer[CAIRO_SVG_DTOSTR_BUFFER_LEN]; void *image_extra; @@ -692,7 +693,7 @@ emit_composite_image_pattern (xmlNodePtr node, status = _cairo_surface_base64_encode (surface, &image_buffer); if (status) - return NULL; + goto BAIL; child = xmlNewChild (node, NULL, CC2XML ("image"), NULL); _cairo_dtostr (buffer, sizeof buffer, image->width); @@ -714,6 +715,7 @@ emit_composite_image_pattern (xmlNodePtr node, if (height != NULL) *height = image->height; +BAIL: _cairo_surface_release_source_image (pattern->surface, image, image_extra); return child; @@ -1710,10 +1712,12 @@ _cairo_svg_document_create (cairo_output_stream_t *output_stream, return document; } -static void +static cairo_svg_document_t * _cairo_svg_document_reference (cairo_svg_document_t *document) { document->refcount++; + + return document; } static void |