[librsvg/rustification] rsvg_cairo_render_new(): Initialize ->bbox to the identity affine



commit d37e275bc6f6d3ff1d81680433903574f6a508d1
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Dec 7 13:57:08 2016 -0600

    rsvg_cairo_render_new(): Initialize ->bbox to the identity affine
    
    Otherwise, when filters cause rsvg_get_surface_of_node() to be called,
    that function will create a RsvgCairoRender with an all-zeros bbox and
    bbox.affine.
    
    This all-zeros affine causes cairo_matrix_invert() inside
    RsvbBbox::clip()/insert() to fail.  In the C version it failed silently,
    since it ignored failures from cairo_matrix_invert().  The Rust version
    panic()s when a matrix can't be inverted.

 rsvg-cairo-render.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)
---
diff --git a/rsvg-cairo-render.c b/rsvg-cairo-render.c
index dd35e1d..6f6522e 100644
--- a/rsvg-cairo-render.c
+++ b/rsvg-cairo-render.c
@@ -55,6 +55,7 @@ RsvgCairoRender *
 rsvg_cairo_render_new (cairo_t * cr, double width, double height)
 {
     RsvgCairoRender *cairo_render = g_new0 (RsvgCairoRender, 1);
+    cairo_matrix_t matrix;
 
     cairo_render->super.type = RSVG_RENDER_TYPE_CAIRO;
     cairo_render->super.free = rsvg_cairo_render_free;
@@ -76,6 +77,9 @@ rsvg_cairo_render_new (cairo_t * cr, double width, double height)
     cairo_render->bb_stack = NULL;
     cairo_render->surfaces_stack = NULL;
 
+    cairo_matrix_init_identity (&matrix);
+    rsvg_bbox_init (&cairo_render->bbox, &matrix);
+
     return cairo_render;
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]