Crash saving masked link containing image if Layers and Objects dialog open
Steps to reproduce:
- open Inkscape
- open layers and objects dialog (Ctrl+Shift+L)
- open test_2.svg
- basic file structure:
<svg>
<defs><mask><circle/></mask></defs>
<a mask>
<image>
</a>
</svg>
- save as pdf
What happened?
- crash
- inkscape_backtrace.txt
Backtrace reproduced below:
Thread 1 "inkscape" received signal SIGSEGV, Segmentation fault.
0x00007ffff5769347 in _cairo_image_analyze_transparency (
image=0x7ffff5817fe0 <_cairo_surface_nil>)
at ../../../../src/cairo-surface-snapshot-inline.h:64
64 ../../../../src/cairo-surface-snapshot-inline.h: No such file or directory.
(gdb) bt
◊0 0x00007ffff5769347 in _cairo_image_analyze_transparency (image=0x7ffff5817fe0 <_cairo_surface_nil>) at ../../../../src/cairo-surface-snapshot-inline.h:64
◊1 0x00007ffff578fa7d in _cairo_recording_surface_merge_source_attributes (op=, source=0x555556d64ee8, surface=, surface=) at ../../../../src/cairo-recording-surface.c:1779
◊2 0x00007ffff57901fd in _cairo_recording_surface_replay_internal (surface=, surface_extents=surface_extents@entry=0x0, surface_transform=surface_transform@entry=0x0, target=target@entry=0x55555748ba10, target_clip=target_clip@entry=0x0, surface_is_unbounded=surface_is_unbounded@entry=0, type=CAIRO_RECORDING_CREATE_REGIONS, region=) at ../../../../src/cairo-recording-surface.c:1902
◊3 0x00007ffff57914bf in _cairo_recording_surface_replay_and_create_regions (surface=, surface_transform=surface_transform@entry=0x0, target=target@entry=0x55555748ba10, surface_is_unbounded=surface_is_unbounded@entry=0) at ../../../../src/cairo-recording-surface.c:2197
◊4 0x00007ffff577285c in _paint_page (surface=surface@entry=0x555558837620) at ../../../../src/cairo-paginated-surface.c:417
◊5 0x00007ffff5772e67 in _cairo_paginated_surface_show_page (abstract_surface=0x555558837620) at ../../../../src/cairo-paginated-surface.c:583
◊6 0x00007ffff57a77cc in INT_cairo_surface_show_page (surface=0x555558837620) at ../../../../src/cairo-surface.c:2504
◊7 0x00007ffff575e9d4 in _cairo_gstate_show_page (gstate=0x555558c90cc0) at ../../../../src/cairo-gstate.c:1400
◊8 0x00007ffff57b3f79 in cairo_show_page (cr=0x555558c90c90) at ../../../../src/cairo.c:2501
◊9 0x00007ffff6c41e86 in Inkscape::Extension::Internal::CairoRenderContext::finish(bool) (this=this@entry=0x555558b38a90, finish_surface=finish_surface@entry=true) at ../src/extension/internal/cairo-render-context.cpp:995
◊10 0x00007ffff6c4af27 in Inkscape::Extension::Internal::pdf_render_document_to_file(SPDocument*, gchar const*, unsigned int, bool, bool, bool, int, gchar const*, bool, bool, double) (doc=doc@entry=0x5555565ef000, filename=filename@entry=0x55555594ebd0 "> /home/nal/Downloads/test_2.pdf", level=level@entry=1, texttopath=texttopath@entry=false, omittext=omittext@entry=false, filtertobitmap=filtertobitmap@entry=true, resolution=96, exportId=0x5555556e3ef0 "", exportDrawing=false, exportCanvas=true, bleedmargin_px=bleedmargin_px@entry=0) at ../src/extension/internal/cairo-renderer-pdf-out.cpp:122
◊11 0x00007ffff6c4b502 in Inkscape::Extension::Internal::CairoRendererPdfOutput::save(Inkscape::Extension::Output*, SPDocument*, char const*) (this=, mod=, doc=0x5555565ef000, filename=0x5555593dea80 "/home/nal/Downloads/test_2.pdf") at ../src/extension/internal/cairo-renderer-pdf-out.cpp:267
◊12 0x00007ffff6c332e3 in Inkscape::Extension::Output::save(SPDocument*, char const*, bool) (this=0x55555560b000, doc=doc@entry=0x5555564f6a80, filename=filename@entry=0x5555593dea80 "/home/nal/Downloads/test_2.pdf", detachbase=detachbase@entry=false) at /usr/include/c++/9/bits/unique_ptr.h:360
◊13 0x00007ffff6c34cb5 in Inkscape::Extension::save(Inkscape::Extension::Extension*, SPDocument*, char const*, bool, bool, Inkscape::Extension::FileSaveMethod) (key=key@entry=0x55555560b000, doc=doc@entry=0x5555564f6a80, filename=, check_overwrite=check_overwrite@entry=true, official=official@entry=true, save_method=save_method@entry=Inkscape::Extension::FILE_SAVE_METHOD_SAVE_AS) at ../src/extension/system.cpp:304
◊14 0x00007ffff76dd07c in file_save(Gtk::Window&, SPDocument*, Glib::ustring const&, Inkscape::Extension::Extension*, bool, bool, Inkscape::Extension::FileSaveMethod) (parentWindow=..., doc=doc@entry=0x5555564f6a80, uri=..., key=key@entry=0x55555560b000, checkoverwrite=checkoverwrite@entry=true, official=official@entry=true, save_method=Inkscape::Extension::FILE_SAVE_METHOD_SAVE_AS) at ../src/file.cpp:474
◊15 0x00007ffff76dcaf7 in sp_file_save_dialog(Gtk::Window&, SPDocument*, Inkscape::Extension::FileSaveMethod) (parentWindow=..., doc=0x5555564f6a80, save_method=save_method@entry=Inkscape::Extension::FILE_SAVE_METHOD_SAVE_AS) at ../src/file.cpp:665
◊16 0x00007ffff76ddfd6 in sp_file_save_as(Gtk::Window&, void*, void*) (parentWindow=...) at ../src/file.cpp:761
◊17 0x00007ffff77f0489 in document_save_as(InkscapeWindow*) (win=) at ../src/actions/actions-file-window.cpp:62
◊18 0x00007ffff77dd802 in sigc::pointer_functor1::operator()(InkscapeWindow* const&) const (_A_a1=, this=) at /usr/include/sigc++-2.0/sigc++/functors/ptr_fun.h:110
◊19 sigc::adaptor_functor >::operator()(InkscapeWindow*&) const (_A_arg1=, this=) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:89
◊20 sigc::bind_functor<-1, sigc::pointer_functor1, InkscapeWindow*, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::operator()() (this=) at /usr/include/sigc++-2.0/sigc++/adaptors/bind.h:1124
◊21 sigc::internal::slot_call0, InkscapeWindow*, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, void>::call_it(sigc::internal::slot_rep*) (rep=) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:136
◊22 0x00007ffff5f7bd64 in sigc::slot1::operator()(Glib::VariantBase const&) const (_A_a1=..., this=0x555558004828) at /usr/include/sigc++-2.0/sigc++/functors/slot_base.h:335
◊23 (anonymous namespace)::SimpleAction_signal_activate_callback(GSimpleAction*, GVariant*, void*) (self=, p0=0x0, data=0x555558004820) at simpleaction.cc:88
◊27 0x00007ffff4f8c0f3 in (instance=instance@entry=0x555557fff050, signal_id=, detail=detail@entry=0) at ../../../gobject/gsignal.c:3555
◊24 0x00007ffff4f6c802 in g_closure_invoke (closure=0x555558004870, return_value=0x0, n_param_values=2, param_values=0x7fffffffd1e0, invocation_hint=0x7fffffffd160) at ../../../gobject/gclosure.c:810
◊25 0x00007ffff4f80243 in signal_emit_unlocked_R (node=node@entry=0x5555558fc210, detail=detail@entry=0, instance=instance@entry=0x555557fff050, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffd1e0) at ../../../gobject/gsignal.c:3813
◊26 0x00007ffff4f8bbbe in g_signal_emit_valist (instance=, signal_id=, detail=, var_args=var_args@entry=0x7fffffffd3b0) at ../../../gobject/gsignal.c:3499
◊28 0x00007ffff50a3f05 in g_simple_action_activate (action=0x555557fff050, parameter=0x0) at ../../../gio/gsimpleaction.c:225
◊29 0x00007ffff5f1746e in Gio::Action_Class::activate_vfunc_callback(_GAction*, _GVariant*) (self=0x555557fff050, parameter=0x0) at action.cc:440
◊30 0x00007ffff3afc812 in gtk_action_muxer_activate_action (action_group=0x555556d93b80, action_name=0x555558738c11 "win.document-save-as", parameter=0x0) at ../../../../gtk/gtkactionmuxer.c:413
◊31 0x00007ffff3afc844 in gtk_action_muxer_activate_action (parameter=0x0, action_name=0x555558738c11 "win.document-save-as", action_group=0x555558049a80) at ../../../../gtk/gtkactionmuxer.c:415
◊32 gtk_action_muxer_activate_action (action_group=0x555558049a80, action_name=0x555558738c11 "win.document-save-as", parameter=0x0) at ../../../../gtk/gtkactionmuxer.c:402
◊33 0x00007ffff3afc844 in gtk_action_muxer_activate_action (parameter=0x0, action_name=0x555558738c11 "win.document-save-as", action_group=0x55555709ca00) at ../../../../gtk/gtkactionmuxer.c:415
◊34 gtk_action_muxer_activate_action (action_group=0x55555709ca00, action_name=0x555558738c11 "win.document-save-as", parameter=0x0) at ../../../../gtk/gtkactionmuxer.c:402
◊35 0x00007ffff3afc844 in gtk_action_muxer_activate_action (parameter=0x0, action_name=0x555558738c11 "win.document-save-as", action_group=0x55555709c9c0) at ../../../../gtk/gtkactionmuxer.c:415
◊36 gtk_action_muxer_activate_action (action_group=0x55555709c9c0, action_name=0x555558738c11 "win.document-save-as", parameter=0x0) at ../../../../gtk/gtkactionmuxer.c:402
◊37 0x00007ffff3afc844 in gtk_action_muxer_activate_action (parameter=0x0, action_name=0x555558738c11 "win.document-save-as", action_group=0x555556f90900) at ../../../../gtk/gtkactionmuxer.c:415
◊38 gtk_action_muxer_activate_action (action_group=0x555556f90900, action_name=0x555558738c11 "win.document-save-as", parameter=0x0) at ../../../../gtk/gtkactionmuxer.c:402
◊39 0x00007ffff3afc844 in gtk_action_muxer_activate_action (parameter=0x0, action_name=0x555558738c11 "win.document-save-as", action_group=0x555556f908c0) at ../../../../gtk/gtkactionmuxer.c:415
◊40 gtk_action_muxer_activate_action (action_group=0x555556f908c0, action_name=0x555558738c11 "win.document-save-as", parameter=0x0) at ../../../../gtk/gtkactionmuxer.c:402
◊41 0x00007ffff3afc844 in gtk_action_muxer_activate_action (parameter=0x0, action_name=0x555558738c11 "win.document-save-as", action_group=0x5555572ac400) at ../../../../gtk/gtkactionmuxer.c:415
◊42 gtk_action_muxer_activate_action (action_group=0x5555572ac400, action_name=0x555558738c11 "win.document-save-as", parameter=0x0) at ../../../../gtk/gtkactionmuxer.c:402
◊43 0x00007ffff3afc844 in gtk_action_muxer_activate_action (parameter=0x0, action_name=0x555558738c11 "win.document-save-as", action_group=0x5555572ac480) at ../../../../gtk/gtkactionmuxer.c:415
◊44 gtk_action_muxer_activate_action (action_group=0x5555572ac480, action_name=0x555558738c11 "win.document-save-as", parameter=0x0) at ../../../../gtk/gtkactionmuxer.c:402
◊45 0x00007ffff3afc844 in gtk_action_muxer_activate_action (parameter=0x0, action_name=0x555558738c11 "win.document-save-as", action_group=0x555556f94280) at ../../../../gtk/gtkactionmuxer.c:415
◊46 gtk_action_muxer_activate_action (action_group=0x555556f94280, action_name=0x555558738c11 "win.document-save-as", parameter=0x0) at ../../../../gtk/gtkactionmuxer.c:402
◊47 0x00007ffff3b16caa in gtk_application_accels_activate (accels=, action_group=action_group@entry=0x555556f94280, key=115, modifier=5) at ../../../../gtk/gtkapplicationaccels.c:448
◊48 0x00007ffff3dac35f in gtk_window_activate_key (window=window@entry=0x555556d962b0 [gtkmm__GtkApplicationWindow], event=event@entry=0x555558d6a670) at ../../../../gtk/gtkwindow.c:12226
◊49 0x00007ffff3dac5e6 in gtk_window_key_press_event (widget=0x555556d962b0 [gtkmm__GtkApplicationWindow], event=0x555558d6a670) at ../../../../gtk/gtkwindow.c:8401
◊50 0x00007ffff469ada9 in Gtk::Widget::on_key_press_event(_GdkEventKey*) (this=this@entry=0x555556cd1580, key_event=key_event@entry=0x555558d6a670) at ../gtkmm/widget.h:365
◊51 0x00007ffff77ba59a in InkscapeWindow::on_key_press_event(_GdkEventKey*) (this=0x555556cd1580, event=0x555558d6a670) at ../src/inkscape-window.cpp:246
◊52 0x00007ffff469cfe9 in Gtk::Widget_Class::key_press_event_callback(_GtkWidget*, _GdkEventKey*) () at widget.cc:4482
◊53 0x00007ffff3ddc36f in _gtk_marshal_BOOLEAN__BOXEDv (closure=0x555555617ec0, return_value=0x7fffffffd9a0, instance=, args=, marshal_data=, n_params=, param_types=0x55555560db30) at gtkmarshalers.c:129
◊54 0x00007ffff4f6ca56 in _g_closure_invoke_va (closure=0x555555617ec0, return_value=0x7fffffffd9a0, instance=0x555556d962b0, args=0x7fffffffda70, n_params=1, param_types=0x55555560db30) at ../../../gobject/gclosure.c:873
◊55 0x00007ffff4f8adf1 in g_signal_emit_valist (instance=0x555556d962b0, signal_id=, detail=, var_args=var_args@entry=0x7fffffffda70) at ../../../gobject/gsignal.c:3408
◊56 0x00007ffff4f8c0f3 in g_signal_emit (instance=instance@entry=0x555556d962b0, signal_id=, detail=detail@entry=0) at ../../../gobject/gsignal.c:3555
◊57 0x00007ffff3d869b3 in gtk_widget_event_internal (event=0x555558d6a670, widget=0x555556d962b0 [gtkmm__GtkApplicationWindow]) at ../../../../gtk/gtkwidget.c:7808
◊58 gtk_widget_event_internal (widget=0x555556d962b0 [gtkmm__GtkApplicationWindow], event=0x555558d6a670) at ../../../../gtk/gtkwidget.c:7677
◊59 0x00007ffff46a2959 in Gtk::Widget::event(_GdkEvent*) (this=, gdk_event=) at ../gtkmm/widget.h:365
◊60 0x00007ffff7502a93 in Inkscape::UI::Widget::CanvasPrivate::EventProcessor::process() (this=0x55555716fab0) at ../src/ui/widget/canvas.cpp:1602
◊61 0x00007ffff7502c59 in Inkscape::UI::Widget::CanvasPrivate::::operator() (__closure=) at /usr/include/c++/9/bits/shared_ptr_base.h:1309
◊62 sigc::adaptor_functor >::operator()(void) const (this=) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:256
◊63 0x00007ffff7502c93 in sigc::internal::slot_call0, bool>::call_it(sigc::internal::slot_rep *) (rep=) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:132
◊64 0x00007ffff5e065d6 in sigc::slot0::operator()() const (this=) at /usr/include/sigc++-2.0/sigc++/functors/slot_base.h:335
◊65 (anonymous namespace)::glibmm_source_callback(void*) (data=) at main.cc:243
◊66 0x00007ffff606b04e in g_main_dispatch (context=0x555555601180) at ../../../glib/gmain.c:3309
◊67 g_main_context_dispatch (context=context@entry=0x555555601180) at ../../../glib/gmain.c:3974
◊68 0x00007ffff606b400 in g_main_context_iterate (context=context@entry=0x555555601180, block=block@entry=1, dispatch=dispatch@entry=1, self=) at ../../../glib/gmain.c:4047
◊69 0x00007ffff606b4a3 in g_main_context_iteration (context=context@entry=0x555555601180, may_block=may_block@entry=1) at ../../../glib/gmain.c:4108
◊70 0x00007ffff509afe5 in g_application_run (application=0x55555565c210 [gtkmm__GtkApplication], argc=, argv=) at ../../../gio/gapplication.c:2559
◊71 0x0000555555557364 in main(int, char**) (argc=, argv=) at /usr/include/glibmm-2.4/glibmm/refptr.h:405
What should have happened?
- no crash
Version info
- Inkscape 1.1.2 (ccedf6bf22, 2022-02-24)
- Inkscape 1.2 (da316b6974, 2022-05-18)
- Inkscape 1.3-dev (74adff3496, 2022-05-26)
- Bisection points to inkscape@271a04ad
commit 271a04add54b2a30e75aac0ceb575a6668a02e11
Author: Thomas Holder <thomas@thomas-holder.de>
Date: Sat May 2 18:25:02 2020 +0200
Better fix for https://gitlab.com/inkscape/inkscape/-/issues/158 without g_return_if_fail
Don't use `g_return_if_fail` for a valid case, it depends on
`G_DISABLE_CHECKS` and is for preconditions (programmer error).