Crash when patternTransform has metrix value 0 0 0 0
Summary:
Inkscape crashes trying to load attached file.
Steps to reproduce:
Download the attached file, run inkscape crash.svg. Alternatively, in already running Inkscape, open the file.
What happened?
I’ve encountered two types of failures. In the first one, Inkscape pops up for a split second and then immediately crashes. In the second one, Inkscape displays a dialogue window with the following backtrace and becomes unresponsive (I have to close it with ^C in the terminal):
0# Inkscape::Application::crash_handler(int) in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
1# 0x00007F65DC649DF0 in /lib/x86_64-linux-gnu/libc.so.6
2# Inkscape::DrawingPattern::renderPattern(Inkscape::RenderContext&, Geom::GenericRect<int> const&, float, int) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
3# Inkscape::NRStyle::preparePaint(Inkscape::DrawingContext&, Inkscape::RenderContext&, Geom::GenericRect<int> const&, Geom::OptRect const&, Inkscape::DrawingPattern const*, Inkscape::NRStyleData::Paint const&, Inkscape::NRStyle::CachedPattern const&) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
4# Inkscape::NRStyle::prepareFill(Inkscape::DrawingContext&, Inkscape::RenderContext&, Geom::GenericRect<int> const&, Geom::OptRect const&, Inkscape::DrawingPattern const*) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
5# Inkscape::DrawingShape::_renderItem(Inkscape::DrawingContext&, Inkscape::RenderContext&, Geom::GenericRect<int> const&, unsigned int, Inkscape::DrawingItem const*) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
6# Inkscape::DrawingItem::render(Inkscape::DrawingContext&, Inkscape::RenderContext&, Geom::GenericRect<int> const&, unsigned int, Inkscape::DrawingItem const*) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
7# Inkscape::DrawingGroup::_renderItem(Inkscape::DrawingContext&, Inkscape::RenderContext&, Geom::GenericRect<int> const&, unsigned int, Inkscape::DrawingItem const*) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
8# Inkscape::DrawingItem::render(Inkscape::DrawingContext&, Inkscape::RenderContext&, Geom::GenericRect<int> const&, unsigned int, Inkscape::DrawingItem const*) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
9# Inkscape::DrawingGroup::_renderItem(Inkscape::DrawingContext&, Inkscape::RenderContext&, Geom::GenericRect<int> const&, unsigned int, Inkscape::DrawingItem const*) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
10# Inkscape::DrawingItem::render(Inkscape::DrawingContext&, Inkscape::RenderContext&, Geom::GenericRect<int> const&, unsigned int, Inkscape::DrawingItem const*) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
11# Inkscape::Drawing::render(Inkscape::DrawingContext&, Geom::GenericRect<int> const&, unsigned int) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
12# Inkscape::CanvasItemDrawing::_render(Inkscape::CanvasItemBuffer&) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
13# Inkscape::CanvasItemGroup::_render(Inkscape::CanvasItemBuffer&) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
14# Inkscape::CanvasItemGroup::_render(Inkscape::CanvasItemBuffer&) const in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
15# Inkscape::UI::Widget::CanvasPrivate::paint_single_buffer(Cairo::RefPtr<Cairo::ImageSurface> const&, Geom::GenericRect<int> const&, bool, bool) in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
16# Inkscape::UI::Widget::CanvasPrivate::paint_rect(Geom::GenericRect<int> const&) in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
17# Inkscape::UI::Widget::CanvasPrivate::render_tile(int) in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
18# 0x00007F65DEA4D31F in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
19# 0x00007F65DEA44978 in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
20# boost::asio::detail::posix_thread::func<boost::asio::thread_pool::thread_function>::run() in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
21# boost_asio_detail_posix_thread_function in /usr/bin/../lib/x86_64-linux-gnu/inkscape/libinkscape_base.so.1.4.0.0
22# 0x00007F65DC69CB7B in /lib/x86_64-linux-gnu/libc.so.6
23# 0x00007F65DC71A7B8 in /lib/x86_64-linux-gnu/libc.so.6
Standard output shows the following (though the last line is only visible in the first failure mode):
Emergency save activated!
Emergency save completed. Inkscape will close now.
If you can reproduce this crash, please file a bug at https://inkscape.org/report
with a detailed description of the steps leading to the crash, so we can fix it.
Floating point exception
Attachment:
<svg xmlns="http://www.w3.org/2000/svg">
<pattern id="d" width="1" height="1"
patternTransform="matrix(0 0 0 0 319 454)"/>
<rect width="1" height="1" fill="url(#d)"/>
</svg>
The transform matrix appears to be the cause. At this point I’m not completely sure where this matrix came from (whether it’s something Inkscape created), but I believe it was generated by https://optimize.svgomg.net/.
What should happen
Inskcae should not crash . when we detect that matrix we should reset it to useul defoults or remove metrix
Version
Inkscape 1.4 (e7c3feb100, 2024-10-09)
Compile (Run)
GLib version: 2.84.0
GTK version: 3.24.49 (3.24.49)
glibmm version: 2.66.7
gtkmm version: 3.24.9
libxml2 version: 2.9.14
libxslt version: 1.1.35
Cairo version: 1.18.4 (1.18.4)
Pango version: 1.56.2 (1.56.3)
HarfBuzz version: 10.2.0 (10.2.0)
OS version: Debian GNU/Linux trixie/sid