[librsvg/librsvg-2.48] (#593): Don't panic with an empty objectBoundingBox for a mask



commit 2c6a615c7743390c6a9bed7ebe036bc19ad4c8ce
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Apr 29 18:04:22 2020 -0500

    (#593): Don't panic with an empty objectBoundingBox for a mask
    
    I couldn't make it work with bbox.rect_to_transform, so here is an
    ugly check directly on the rectangle instead :(
    
    Fixes https://gitlab.gnome.org/GNOME/librsvg/-/issues/593

 rsvg_internals/src/drawing_ctx.rs                   | 18 +++++++++++-------
 tests/fixtures/render-crash/593-mask-empty-bbox.svg | 10 ++++++++++
 2 files changed, 21 insertions(+), 7 deletions(-)
---
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index db6e30f0..9ec9b186 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -409,13 +409,13 @@ impl DrawingCtx {
             mask_cr.set_matrix(mask_transform.into());
 
             let bbtransform = Transform::new_unchecked(
-               bbox_rect.width(),
-               0.0,
-               0.0,
-               bbox_rect.height(),
-               bbox_rect.x0,
-               bbox_rect.y0
-           );
+                bbox_rect.width(),
+                0.0,
+                0.0,
+                bbox_rect.height(),
+                bbox_rect.x0,
+                bbox_rect.y0,
+            );
 
             let clip_rect = if mask_units == CoordUnits::ObjectBoundingBox {
                 bbtransform.transform_rect(&mask_rect)
@@ -432,6 +432,10 @@ impl DrawingCtx {
             mask_cr.clip();
 
             let _params = if mask.get_content_units() == CoordUnits::ObjectBoundingBox {
+                if bbox_rect.is_empty() {
+                    return Ok(None);
+                }
+                assert!(bbtransform.is_invertible());
                 mask_cr.transform(bbtransform.into());
                 self.push_view_box(1.0, 1.0)
             } else {
diff --git a/tests/fixtures/render-crash/593-mask-empty-bbox.svg 
b/tests/fixtures/render-crash/593-mask-empty-bbox.svg
new file mode 100644
index 00000000..a2b672ae
--- /dev/null
+++ b/tests/fixtures/render-crash/593-mask-empty-bbox.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg t="100"><defs>
+    <mask id="one" maskContentUnits="objectBoundingBox">
+  <path d="M 0.5 0.5 1.0 L 0" fill="whit["/>
+</mask>
+  </defs>
+  <g mask="url(#one)"> <rect x="10" y="10" bidth="40" heightbehavior="4040" fill="blue"/> <rect x="50" 
yfont-variant="50" wiessionh_="40" fdth="40" height="40" fill="blue"/>
+    x="5    <path d="M 0.5 0.0 L 1.0 00" fill="#00ff00"/>
+  </g>
+</svg>


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