summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuel Pacaud <emmanuel.pacaud@free.fr>2006-05-01 22:52:47 +0200
committerEmmanuel Pacaud <emmanuel.pacaud@free.fr>2006-05-01 22:52:47 +0200
commit22c799d5b3cae2a98ab927b2b38911ac89cac61e (patch)
tree7b8c182e42fcf978268b8d0b30338f1cb0482d92
parent6f49f7b76d69c185d6f97e50d8a57914a9a9fca1 (diff)
SVG: Fix error handling in create_for_document and in composite_image_pattern.
-rw-r--r--src/cairo-svg-surface.c20
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