[librsvg/librsvg-2.48] (#593): Don't panic with an empty objectBoundingBox for a mask
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg/librsvg-2.48] (#593): Don't panic with an empty objectBoundingBox for a mask
- Date: Thu, 30 Apr 2020 21:28:25 +0000 (UTC)
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]