diff options
author | Adrian Johnson <ajohnson@redneon.com> | 2022-06-18 12:50:24 +0930 |
---|---|---|
committer | Adrian Johnson <ajohnson@redneon.com> | 2022-06-26 09:54:15 +0930 |
commit | cdb7c298c7b89307ad69b94a1126221bd7c06579 (patch) | |
tree | 50cbbf797b829663f931f15c3a9c9daa8d020571 /src/cairo-svg-surface.c | |
parent | 99d59f00d649c2b347f41e6e24fb0ddb2abb077b (diff) | |
download | cairo-cdb7c298c7b89307ad69b94a1126221bd7c06579.tar.gz |
svg: Fix invalid output when image size is 0x0
cairo_surface_write_to_png_stream fails if width or height is 0
Diffstat (limited to 'src/cairo-svg-surface.c')
-rw-r--r-- | src/cairo-svg-surface.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/src/cairo-svg-surface.c b/src/cairo-svg-surface.c index dfb72b2ad..b39a94a37 100644 --- a/src/cairo-svg-surface.c +++ b/src/cairo-svg-surface.c @@ -2118,24 +2118,28 @@ _cairo_svg_surface_emit_surface (cairo_svg_document_t *document, assert (is_bounded); _cairo_svg_stream_printf (&document->xml_node_defs, - "<image id=\"source-%d\" x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" xlink:href=\"", + "<image id=\"source-%d\" x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\"", source_id, extents.x, extents.y, extents.width, extents.height); - cairo_surface_get_mime_data (surface, CAIRO_MIME_TYPE_URI, - &uri, &uri_len); - if (uri != NULL) { - _cairo_svg_surface_emit_attr_value (&document->xml_node_defs, - uri, uri_len); - } else { - status = _cairo_surface_base64_encode (surface, - &document->xml_node_defs); - if (unlikely (status)) - return status; + if (extents.width != 0 && extents.height != 0) { + _cairo_svg_stream_printf (&document->xml_node_defs, " xlink:href=\""); + cairo_surface_get_mime_data (surface, CAIRO_MIME_TYPE_URI, + &uri, &uri_len); + if (uri != NULL) { + _cairo_svg_surface_emit_attr_value (&document->xml_node_defs, + uri, uri_len); + } else { + status = _cairo_surface_base64_encode (surface, + &document->xml_node_defs); + if (unlikely (status)) + return status; + } + _cairo_svg_stream_printf (&document->xml_node_defs, "\""); } - _cairo_svg_stream_printf (&document->xml_node_defs, "\"/>\n"); + _cairo_svg_stream_printf (&document->xml_node_defs, "/>\n"); return CAIRO_STATUS_SUCCESS; } |