[librsvg] gitlab#187 - Don't crash when setting a gradient on a zero-sized object
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] gitlab#187 - Don't crash when setting a gradient on a zero-sized object
- Date: Mon, 22 Jan 2018 23:32:06 +0000 (UTC)
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]