[librsvg] gitlab#187 - Don't crash when setting a gradient on a zero-sized object



commit e0e5ead3bedb2b6feded6649e45cf4118e75f568
Author: Federico Mena Quintero <federico gnome org>
Date:   Mon Jan 22 17:30:15 2018 -0600

    gitlab#187 - Don't crash when setting a gradient on a zero-sized object
    
    If the incoming bbox is zero-sized, we would create an all-zeros
    affine for the gradient's transformation.
    
    https://gitlab.gnome.org/GNOME/librsvg/issues/187

 rust/src/bbox.rs                                            |  5 +++++
 rust/src/gradient.rs                                        |  4 ++++
 .../render-crash/187-set-gradient-on-empty-path.svg         | 13 +++++++++++++
 3 files changed, 22 insertions(+)
---
diff --git a/rust/src/bbox.rs b/rust/src/bbox.rs
index 9cf4827..8439912 100644
--- a/rust/src/bbox.rs
+++ b/rust/src/bbox.rs
@@ -3,6 +3,7 @@ use ::glib_sys;
 
 use glib::translate::*;
 use cairo::MatrixTrait;
+use util::*;
 
 /* Keep this in sync with ../../rsvg-private.h:RsvgBbox */
 #[repr(C)]
@@ -16,6 +17,10 @@ impl RsvgBbox {
     pub fn is_virgin (&self) -> bool {
         from_glib (self.virgin)
     }
+
+    pub fn is_empty(&self) -> bool {
+        from_glib(self.virgin) || double_equals(self.rect.width, 0.0) || double_equals(self.rect.height, 0.0)
+    }
 }
 
 #[no_mangle]
diff --git a/rust/src/gradient.rs b/rust/src/gradient.rs
index d48bed9..32243c6 100644
--- a/rust/src/gradient.rs
+++ b/rust/src/gradient.rs
@@ -625,6 +625,10 @@ fn resolve_fallbacks_and_set_pattern (gradient: &Gradient,
                                       bbox:     RsvgBbox) -> bool {
     let mut fallback_source = NodeFallbackSource::new (draw_ctx);
 
+    if bbox.is_empty() {
+        return true
+    }
+
     let resolved = resolve_gradient (gradient, &mut fallback_source);
 
     set_pattern_on_draw_context (&resolved, draw_ctx, opacity, &bbox)
diff --git a/tests/fixtures/render-crash/187-set-gradient-on-empty-path.svg 
b/tests/fixtures/render-crash/187-set-gradient-on-empty-path.svg
new file mode 100644
index 0000000..d6b7f65
--- /dev/null
+++ b/tests/fixtures/render-crash/187-set-gradient-on-empty-path.svg
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg";
+     xmlns:xlink="http://www.w3.org/1999/xlink";
+     width="10" height="10">
+  <defs>
+    <linearGradient id="grad"/>
+    <g id="path">
+      <path d=""/>
+    </g>
+  </defs>
+  <g>
+    <use style="fill:url(#grad)" xlink:href="#path"/>
+  </g>
+</svg>


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