Conversion fails when gradientTransform includes very small (scientific notation) numbers
rsvg-convert version 2.48.4 encounters a fatal error when processing this file (source) that includes very small numbers in some of the gradientTransform matrices.
<linearGradient
id="_Linear1" x1="0" y1="0" x2="1" y2="0"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.922988,1.13033e-16,-1.13033e-16,-0.922988,4.31613,0.876733)"
>
<stop offset="0" style="stop-color:rgb(176,176,176);stop-opacity:1"/>
<stop offset="1" style="stop-color:rgb(232,232,233);stop-opacity:1"/>
</linearGradient>
$ RUST_BACKTRACE=full rsvg-convert -w 512 -f png -u -o 20190201134717!Crossed_swords.svg.png 20190201134717!Crossed_swords.svg
thread '<unnamed>' panicked at 'Cairo error "out of memory"', /home/ac/.cargo/registry/src/github.com-1ecc6299db9ec823/cairo-rs-0.8.1/src/enums.rs:274:13
stack backtrace:
0: 0x7fb895d710f5 - backtrace::backtrace::libunwind::trace::he332cdcbba52aaad
at /build/rust/src/rustc-1.44.1-src/vendor/backtrace/src/backtrace/libunwind.rs:86
1: 0x7fb895d710f5 - backtrace::backtrace::trace_unsynchronized::hef03e255f1bf514f
at /build/rust/src/rustc-1.44.1-src/vendor/backtrace/src/backtrace/mod.rs:66
2: 0x7fb895d710f5 - std::sys_common::backtrace::_print_fmt::hb165a755ba92b1b4
at src/libstd/sys_common/backtrace.rs:78
3: 0x7fb895d710f5 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h45e432f08dbe7d76
at src/libstd/sys_common/backtrace.rs:59
4: 0x7fb895db383c - core::fmt::write::h73c3f84d9cf018c3
at src/libcore/fmt/mod.rs:1069
5: 0x7fb895d627c3 - std::io::Write::write_fmt::h8ac7e773e542f3e7
at src/libstd/io/mod.rs:1504
6: 0x7fb895d75f30 - std::sys_common::backtrace::_print::he776a3581f8527e1
at src/libstd/sys_common/backtrace.rs:62
7: 0x7fb895d75f30 - std::sys_common::backtrace::print::h969151019a7e30fc
at src/libstd/sys_common/backtrace.rs:49
8: 0x7fb895d75f30 - std::panicking::default_hook::{{closure}}::hac98c3c5d7e976ca
at src/libstd/panicking.rs:198
9: 0x7fb895d75c7c - std::panicking::default_hook::h4e2eee37e61c3121
at src/libstd/panicking.rs:218
10: 0x7fb895d765d1 - std::panicking::rust_panic_with_hook::heb6c94442a23e0d6
at src/libstd/panicking.rs:511
11: 0x7fb895d761bb - rust_begin_unwind
at src/libstd/panicking.rs:419
12: 0x7fb895d7612b - std::panicking::begin_panic_fmt::hc94e0c124ccb9400
at src/libstd/panicking.rs:373
13: 0x7fb895b0865f - cairo::enums::Status::ensure_valid::hd6191aa94860f3e3
at /home/ac/.cargo/registry/src/github.com-1ecc6299db9ec823/cairo-rs-0.8.1/src/enums.rs:274
14: 0x7fb895b0865f - cairo::context::Context::ensure_status::hfa67c6804a513a01
at /home/ac/.cargo/registry/src/github.com-1ecc6299db9ec823/cairo-rs-0.8.1/src/context.rs:158
15: 0x7fb895a6f95b - rsvg_internals::drawing_ctx::DrawingCtx::with_saved_cr::hf90afa02f8b54f73
at rsvg_internals/src/drawing_ctx.rs:718
16: 0x7fb895a6f95b - rsvg_internals::drawing_ctx::DrawingCtx::with_discrete_layer::hed0abaeb14f870e7
at rsvg_internals/src/drawing_ctx.rs:483
17: 0x7fb895a6f95b - rsvg_internals::drawing_ctx::DrawingCtx::draw_path::h98927437d948c834
at rsvg_internals/src/drawing_ctx.rs:987
18: 0x7fb895ac69b7 - rsvg_internals::shapes::Shape::draw::h20e91fc7e029b8b4
at rsvg_internals/src/shapes.rs:45
19: 0x7fb895ac69b7 - <rsvg_internals::shapes::Path as rsvg_internals::node::NodeTrait>::draw::h16127ed5b3960751
at rsvg_internals/src/shapes.rs:145
20: 0x7fb895ab4c25 - <rctree::Node<rsvg_internals::node::NodeData> as rsvg_internals::node::NodeDraw>::draw::{{closure}}::h377f5252a50cbe1d
at rsvg_internals/src/node.rs:514
21: 0x7fb895a6c492 - rsvg_internals::drawing_ctx::DrawingCtx::with_saved_transform::h9c203864a7dbc3f7
at rsvg_internals/src/drawing_ctx.rs:656
22: 0x7fb895ab4a0c - <rctree::Node<rsvg_internals::node::NodeData> as rsvg_internals::node::NodeDraw>::draw::h0a56b7af4e87e7c8
at rsvg_internals/src/node.rs:513
23: 0x7fb895a7160b - rsvg_internals::drawing_ctx::DrawingCtx::draw_node_from_stack::h16c36180f0989c43
at rsvg_internals/src/drawing_ctx.rs:1106
24: 0x7fb895ab4f70 - <rctree::Node<rsvg_internals::node::NodeData> as rsvg_internals::node::NodeDraw>::draw_children::h5906702c42329072
at rsvg_internals/src/node.rs:536
25: 0x7fb895acb8f5 - <rsvg_internals::structure::Group as rsvg_internals::node::NodeTrait>::draw::{{closure}}::h4143bbacef73ae53
at rsvg_internals/src/structure.rs:40
26: 0x7fb895a6919b - rsvg_internals::drawing_ctx::DrawingCtx::with_discrete_layer::{{closure}}::he5b1be538be65245
at rsvg_internals/src/drawing_ctx.rs:627
27: 0x7fb895acb89f - rsvg_internals::drawing_ctx::DrawingCtx::with_saved_cr::hf90afa02f8b54f73
at rsvg_internals/src/drawing_ctx.rs:717
28: 0x7fb895acb89f - rsvg_internals::drawing_ctx::DrawingCtx::with_discrete_layer::hed0abaeb14f870e7
at rsvg_internals/src/drawing_ctx.rs:483
29: 0x7fb895acb89f - <rsvg_internals::structure::Group as rsvg_internals::node::NodeTrait>::draw::hd8a5a9f0b3663dd6
at rsvg_internals/src/structure.rs:39
30: 0x7fb895ab4c25 - <rctree::Node<rsvg_internals::node::NodeData> as rsvg_internals::node::NodeDraw>::draw::{{closure}}::h377f5252a50cbe1d
at rsvg_internals/src/node.rs:514
31: 0x7fb895a6c492 - rsvg_internals::drawing_ctx::DrawingCtx::with_saved_transform::h9c203864a7dbc3f7
at rsvg_internals/src/drawing_ctx.rs:656
32: 0x7fb895ab4a0c - <rctree::Node<rsvg_internals::node::NodeData> as rsvg_internals::node::NodeDraw>::draw::h0a56b7af4e87e7c8
at rsvg_internals/src/node.rs:513
33: 0x7fb895a7160b - rsvg_internals::drawing_ctx::DrawingCtx::draw_node_from_stack::h16c36180f0989c43
at rsvg_internals/src/drawing_ctx.rs:1106
34: 0x7fb895ab4f70 - <rctree::Node<rsvg_internals::node::NodeData> as rsvg_internals::node::NodeDraw>::draw_children::h5906702c42329072
at rsvg_internals/src/node.rs:536
35: 0x7fb895acb8f5 - <rsvg_internals::structure::Group as rsvg_internals::node::NodeTrait>::draw::{{closure}}::h4143bbacef73ae53
at rsvg_internals/src/structure.rs:40
36: 0x7fb895a6919b - rsvg_internals::drawing_ctx::DrawingCtx::with_discrete_layer::{{closure}}::he5b1be538be65245
at rsvg_internals/src/drawing_ctx.rs:627
37: 0x7fb895acb89f - rsvg_internals::drawing_ctx::DrawingCtx::with_saved_cr::hf90afa02f8b54f73
at rsvg_internals/src/drawing_ctx.rs:717
38: 0x7fb895acb89f - rsvg_internals::drawing_ctx::DrawingCtx::with_discrete_layer::hed0abaeb14f870e7
at rsvg_internals/src/drawing_ctx.rs:483
39: 0x7fb895acb89f - <rsvg_internals::structure::Group as rsvg_internals::node::NodeTrait>::draw::hd8a5a9f0b3663dd6
at rsvg_internals/src/structure.rs:39
40: 0x7fb895ab4c25 - <rctree::Node<rsvg_internals::node::NodeData> as rsvg_internals::node::NodeDraw>::draw::{{closure}}::h377f5252a50cbe1d
at rsvg_internals/src/node.rs:514
41: 0x7fb895a6c492 - rsvg_internals::drawing_ctx::DrawingCtx::with_saved_transform::h9c203864a7dbc3f7
at rsvg_internals/src/drawing_ctx.rs:656
42: 0x7fb895ab4a0c - <rctree::Node<rsvg_internals::node::NodeData> as rsvg_internals::node::NodeDraw>::draw::h0a56b7af4e87e7c8
at rsvg_internals/src/node.rs:513
43: 0x7fb895a7160b - rsvg_internals::drawing_ctx::DrawingCtx::draw_node_from_stack::h16c36180f0989c43
at rsvg_internals/src/drawing_ctx.rs:1106
44: 0x7fb895ab4f70 - <rctree::Node<rsvg_internals::node::NodeData> as rsvg_internals::node::NodeDraw>::draw_children::h5906702c42329072
at rsvg_internals/src/node.rs:536
45: 0x7fb895acd65a - <rsvg_internals::structure::Svg as rsvg_internals::node::NodeTrait>::draw::{{closure}}::h89558813bfbd40f7
at rsvg_internals/src/structure.rs:263
46: 0x7fb895a6919b - rsvg_internals::drawing_ctx::DrawingCtx::with_discrete_layer::{{closure}}::he5b1be538be65245
at rsvg_internals/src/drawing_ctx.rs:627
47: 0x7fb895acd4c7 - rsvg_internals::drawing_ctx::DrawingCtx::with_saved_cr::hf90afa02f8b54f73
at rsvg_internals/src/drawing_ctx.rs:717
48: 0x7fb895acd4c7 - rsvg_internals::drawing_ctx::DrawingCtx::with_discrete_layer::hed0abaeb14f870e7
at rsvg_internals/src/drawing_ctx.rs:483
49: 0x7fb895acd4c7 - <rsvg_internals::structure::Svg as rsvg_internals::node::NodeTrait>::draw::h8ce269e49ffc4f01
at rsvg_internals/src/structure.rs:259
50: 0x7fb895ab4c25 - <rctree::Node<rsvg_internals::node::NodeData> as rsvg_internals::node::NodeDraw>::draw::{{closure}}::h377f5252a50cbe1d
at rsvg_internals/src/node.rs:514
51: 0x7fb895a6c492 - rsvg_internals::drawing_ctx::DrawingCtx::with_saved_transform::h9c203864a7dbc3f7
at rsvg_internals/src/drawing_ctx.rs:656
52: 0x7fb895ab4a0c - <rctree::Node<rsvg_internals::node::NodeData> as rsvg_internals::node::NodeDraw>::draw::h0a56b7af4e87e7c8
at rsvg_internals/src/node.rs:513
53: 0x7fb895a7160b - rsvg_internals::drawing_ctx::DrawingCtx::draw_node_from_stack::h16c36180f0989c43
at rsvg_internals/src/drawing_ctx.rs:1106
54: 0x7fb895aa830a - rsvg_internals::handle::Handle::render_layer::h2fd964055d842fe4
at rsvg_internals/src/handle.rs:261
55: 0x7fb895a16761 - rsvg_c_api::c_api::CHandle::render_layer::hde0b2b3204fcb899
at librsvg/c_api.rs:960
56: 0x7fb895a18084 - rsvg_c_api::c_api::CHandle::render_cairo_sub::h22ea0596a07efc9d
at librsvg/c_api.rs:899
57: 0x7fb895a18084 - rsvg_rust_handle_render_cairo_sub
at librsvg/c_api.rs:1332
58: 0x556c9af319ae - main
at /usr/src/debug/librsvg/rsvg-convert.c:602
59: 0x7fb8951ac002 - __libc_start_main
60: 0x556c9af327ee - _start
61: 0x0 - <unknown>
fatal runtime error: failed to initiate panic, error 5
fish: “RUST_BACKTRACE=full rsvg-conver…” terminated by signal SIGABRT (Abort)
Conversion works as expected after rounding the scientific notation numbers down to 0. 20190201134717_Crossed_swords-fixed.svg
This issue was originally reported in librsvg 2.40.16 at https://phabricator.wikimedia.org/T215067. 2.40.16 outputs a 0-byte png with no error messages when trying to convert the file.