Segfault: URIReference refcount is broken and causes use after free
Summary:
Segmentation fault when copying an object to clipboard.
Steps to reproduce:
Copy both files into a single directory. Open main.svg. It shows two rectangle-ish boxes with a gradient. Select the boxes and copy then to the clipboard using Ctrl+C. SEGV triggered.
Minimal files to reproduce the issue attached. main.svg levelB.svg
Investigation
I did my own investigation and it seems the LinearGradient is being used after free.
The URIReference refcount reaches zero and it is freed. But the main document is still holding a
pointer to it.
I've seen some code that handles clones differently in the refcounting: if (_obj && (!_owner || !_owner->cloned))
Probably having a clone being referenced from a different file is triggering some corner case.
Seeing the Inkscape code for the first time it is hard to understand if the recount wasn't increased when copying the document, or if the decrease shouldn't happen.
Some insight from users familiar with the code would be helpful set the direction where to debug further.
Version info
Inkscape 1.3.2 (091e20ef0f, 2023-11-25)
GLib version: 2.80.3
GTK version: 3.24.43
glibmm version: 2.66.7
gtkmm version: 3.24.9
libxml2 version: 2.12.8
libxslt version: 1.1.41
Cairo version: 1.18.0
Pango version: 1.54.0
HarfBuzz version: 8.5.0
OS version: Fedora Linux 40 (Forty)
Hardware: x86_64
Backtrace
Thread 1 "inkscape" received signal SIGSEGV, Segmentation fault.
Downloading source file /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/util/cast.h
0x00007ffff709ee86 in is<SPPaintServer, SPObject> () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/util/cast.h:44
44 auto const s_tag = s->tag();
(gdb) bt full
#0 0x00007ffff709ee86 in is<SPPaintServer, SPObject> () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/util/cast.h:44
#1 cast<SPPaintServer, SPObject> () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/util/cast.h:83
#2 SPItem::fill_ps_ref_changed () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-item.cpp:646
#3 0x00007ffff709a4e8 in sigc::internal::signal_emit2<void, Geom::Affine const*, SPItem*, sigc::nil>::emit () at /usr/include/sigc++-2.0/sigc++/signal.h:1296
#4 0x00007ffff7801e23 in sigc::signal2<void, SPObject*, SPObject*, sigc::nil>::emit () at /usr/include/sigc++-2.0/sigc++/signal.h:3119
#5 sp_style_fill_paint_server_ref_changed () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/style.cpp:1206
#6 0x00007ffff709a4e8 in sigc::internal::signal_emit2<void, Geom::Affine const*, SPItem*, sigc::nil>::emit () at /usr/include/sigc++-2.0/sigc++/signal.h:1296
#7 0x00007ffff7117cad in sigc::signal2<void, SPObject*, SPObject*, sigc::nil>::emit () at /usr/include/sigc++-2.0/sigc++/signal.h:3119
#8 Inkscape::URIReference::_setObject () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/uri-references.cpp:235
#9 0x00007ffff7118963 in Inkscape::URIReference::~URIReference () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/uri-references.cpp:52
#10 0x00007ffff70d6ea1 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release () at /usr/include/c++/14/bits/shared_ptr_base.h:346
#11 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release () at /usr/include/c++/14/bits/shared_ptr_base.h:317
#12 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count () at /usr/include/c++/14/bits/shared_ptr_base.h:1069
#13 std::__shared_ptr<SPPaintServerReference, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr () at /usr/include/c++/14/bits/shared_ptr_base.h:1525
#14 std::__shared_ptr<SPPaintServerReference, (__gnu_cxx::_Lock_policy)2>::reset () at /usr/include/c++/14/bits/shared_ptr_base.h:1643
#15 SPObject::release () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:724
#16 0x00007ffff709d73c in SPItem::release () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-item.cpp:472
#17 0x00007ffff70d6b4b in SPObject::releaseReferences () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:922
#18 0x00007ffff70d6c50 in SPObject::detach () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:646
#19 SPObject::detach () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:640
#20 0x00007ffff70d6e1b in SPObject::release () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:733
#21 0x00007ffff709d73c in SPItem::release () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-item.cpp:472
#22 0x00007ffff70d6b4b in SPObject::releaseReferences () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:922
#23 0x00007ffff70d6c50 in SPObject::detach () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:646
#24 SPObject::detach () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:640
#25 0x00007ffff710b717 in SPUse::href_changed () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-use.cpp:596
#26 0x00007ffff709a4e8 in sigc::internal::signal_emit2<void, Geom::Affine const*, SPItem*, sigc::nil>::emit () at /usr/include/sigc++-2.0/sigc++/signal.h:1296
#27 0x00007ffff7117cad in sigc::signal2<void, SPObject*, SPObject*, sigc::nil>::emit () at /usr/include/sigc++-2.0/sigc++/signal.h:3119
#28 Inkscape::URIReference::_setObject () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/uri-references.cpp:235
#29 0x00007ffff6d86c90 in sigc::internal::signal_emit1<void, Inkscape::Display::TemporaryItem*, sigc::nil>::emit () at /usr/include/sigc++-2.0/sigc++/signal.h:1041
#30 0x00007ffff70d6b42 in sigc::signal1<void, SPObject*, sigc::nil>::emit () at /usr/include/sigc++-2.0/sigc++/signal.h:2961
#31 SPObject::releaseReferences () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:920
#32 0x00007ffff70d6c50 in SPObject::detach () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:646
#33 SPObject::detach () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:640
#34 0x00007ffff70d6e1b in SPObject::release () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:733
#35 0x00007ffff709d73c in SPItem::release () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-item.cpp:472
#36 0x00007ffff70d6b4b in SPObject::releaseReferences () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:922
#37 0x00007ffff70d6c50 in SPObject::detach () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:646
#38 SPObject::detach () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:640
#39 0x00007ffff70d6e1b in SPObject::release () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:733
#40 0x00007ffff709d73c in SPItem::release () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-item.cpp:472
#41 0x00007ffff70d6b4b in SPObject::releaseReferences () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/object/sp-object.cpp:922
#42 0x00007ffff773793c in SPDocument::~SPDocument () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/document.cpp:190
#43 0x00007ffff7737d29 in SPDocument::~SPDocument () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/document.cpp:231
#44 boost::checked_delete<SPDocument const> () at /usr/include/boost/core/checked_delete.hpp:44
#45 boost::delete_clone<SPDocument> () at /usr/include/boost/ptr_container/clone_allocator.hpp:45
#46 boost::heap_clone_allocator::deallocate_clone<SPDocument> () at /usr/include/boost/ptr_container/clone_allocator.hpp:63
#47 boost::ptr_container_detail::reversible_ptr_container<boost::ptr_container_detail::sequence_config<SPDocument, std::__cxx11::list<void*, std::allocator<void*> > >, boost::heap_clone_allocator>::remove<boost::void_ptr_iterator<std::_List_iterator<void*>, SPDocument> > () at /usr/include/boost/ptr_container/detail/reversible_ptr_container.hpp:237
#48 boost::ptr_container_detail::reversible_ptr_container<boost::ptr_container_detail::sequence_config<SPDocument, std::__cxx11::list<void*, std::allocator<void*> > >, boost::heap_clone_allocator>::remove<boost::void_ptr_iterator<std::_List_iterator<void*>, SPDocument> > () at /usr/include/boost/ptr_container/detail/reversible_ptr_container.hpp:244
#49 boost::ptr_container_detail::reversible_ptr_container<boost::ptr_container_detail::sequence_config<SPDocument, std::__cxx11::list<void*, std::allocator<void*> > >, boost::heap_clone_allocator>::remove_all ()
at /usr/include/boost/ptr_container/detail/reversible_ptr_container.hpp:205
#50 boost::ptr_container_detail::reversible_ptr_container<boost::ptr_container_detail::sequence_config<SPDocument, std::__cxx11::list<void*, std::allocator<void*> > >, boost::heap_clone_allocator>::~reversible_ptr_container ()
at /usr/include/boost/ptr_container/detail/reversible_ptr_container.hpp:499
#51 boost::ptr_sequence_adapter<SPDocument, std::__cxx11::list<void*, std::allocator<void*> >, boost::heap_clone_allocator>::~ptr_sequence_adapter () at /usr/include/boost/ptr_container/ptr_sequence_adapter.hpp:128
#52 boost::ptr_list<SPDocument, boost::heap_clone_allocator, std::allocator<void*> >::~ptr_list () at /usr/include/boost/ptr_container/ptr_list.hpp:37
#53 SPDocument::~SPDocument () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/document.cpp:231
#54 0x00007ffff6dba319 in SPDocument::~SPDocument () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/document.cpp:231
#55 std::default_delete<SPDocument>::operator() () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/document.h:520
#56 std::default_delete<SPDocument>::operator() () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/document.h:515
--Type <RET> for more, q to quit, c to continue without paging--c
#57 std::unique_ptr<SPDocument, std::default_delete<SPDocument> >::~unique_ptr () at /usr/include/c++/14/bits/unique_ptr.h:398
#58 Inkscape::Extension::Output::save () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/extension/output.cpp:226
#59 0x00007ffff71550e5 in Inkscape::UI::ClipboardManagerImpl::_onGet () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/ui/clipboard.cpp:1726
#60 0x00007ffff486bcc1 in sigc::slot2<void, Gtk::Menu*, Glib::RefPtr<Gio::AppInfo> const&>::operator() (this=0x5555581dd400, _A_a1=@0x7fffffffcf60: 0x7fffffffd3c0, _A_a2=...) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:813
#61 (anonymous namespace)::SignalProxy_GetClear_gtk_callback_get (selection_data=<optimized out>, info=<optimized out>, data=0x5555581dd400) at ../untracked/gtk/gtkmm/clipboard.cc:71
cppSelectionData = {<Gtk::SelectionData> = {gobject_ = 0x7fffffffd3c0}, <No data fields>}
self = 0x5555581dd400
#65 0x00007ffff592b638 in <emit signal '0x7ffff423d2ba "selection-get"' on instance 0x5555590e3080 [GtkInvisible]> (instance=instance@entry=0x5555590e3080, detailed_signal=detailed_signal@entry=0x7ffff423d2ba "selection-get")
at ../gobject/gsignal.c:3624
var_args = {{gp_offset = 16, fp_offset = 48, overflow_arg_area = 0x7fffffffd330, reg_save_area = 0x7fffffffd240}}
detail = <optimized out>
signal_id = 111
itype = 0x55555574b2a0 [GtkInvisible/GtkWidget/GInitiallyUnowned]
__func__ = "g_signal_emit_by_name"
#62 0x00007ffff3e89d18 in _gtk_marshal_VOID__BOXED_UINT_UINTv
(closure=0x555558f60d80, return_value=<optimized out>, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x55555564e410) at gtk/gtkmarshalers.c:3789
cc = 0x555558f60d80
data1 = <optimized out>
data2 = 0x0
callback = 0x7ffff418c850 <selection_get_cb>
arg0 = 0x7fffffffd3c0
arg1 = 7
arg2 = 5
args_copy = {{gp_offset = 40, fp_offset = 48, overflow_arg_area = 0x7fffffffd330, reg_save_area = 0x7fffffffd240}}
#63 0x00007ffff592b254 in _g_closure_invoke_va (closure=0x555558f60d80, return_value=0x0, instance=0x5555590e3080, args=0x7fffffffd210, n_params=<optimized out>, param_types=0x55555564e410) at ../gobject/gclosure.c:897
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = 0
real_closure = 0x555558f60d60
real_closure = <optimized out>
__func__ = {<optimized out> <repeats 21 times>}
_g_boolean_var_50 = <optimized out>
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = <optimized out>
_g_boolean_var_51 = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = {closure = {ref_count = <optimized out>, meta_marshal_nouse = <optimized out>, n_guards = <optimized out>, n_fnotifiers = <optimized out>, n_inotifiers = <optimized out>, in_inotify = <optimized out>, floating = <optimized out>, derivative_flag = <optimized out>, in_marshal = <optimized out>, is_invalid = <optimized out>, marshal = <optimized out>, data = <optimized out>, notifiers = <optimized out>}, vint = <optimized out>}
gaicae_oldval = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = {closure = {ref_count = <optimized out>, meta_marshal_nouse = <optimized out>, n_guards = <optimized out>, n_fnotifiers = <optimized out>, n_inotifiers = <optimized out>, in_inotify = <optimized out>, floating = <optimized out>, derivative_flag = <optimized out>, in_marshal = <optimized out>, is_invalid = <optimized out>, marshal = <optimized out>, data = <optimized out>, notifiers = <optimized out>}, vint = <optimized out>}
gaicae_oldval = <optimized out>
#64 signal_emit_valist_unlocked (instance=instance@entry=0x5555590e3080, signal_id=signal_id@entry=111, detail=0, var_args=var_args@entry=0x7fffffffd210) at ../gobject/gsignal.c:3424
return_accu = 0x0
accu = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
emission = {next = 0x7fffffffd550, instance = 0x5555590e3080, ihint = {signal_id = 111, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x55555574b2a0 [GtkInvisible/GtkWidget/GInitiallyUnowned]}
instance_type = 0x55555574b2a0 [GtkInvisible/GtkWidget/GInitiallyUnowned]
emission_return = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
rtype = 0x4
static_scope = <optimized out>
fastpath_handler = <optimized out>
closure = <optimized out>
run_type = <optimized out>
hlist = <optimized out>
l = <optimized out>
fastpath = <optimized out>
instance_and_params = <optimized out>
param_values = <optimized out>
node = <optimized out>
i = <optimized out>
node_copy = {signal_id = 111, itype = 0x555555639c40 [GtkWidget/GInitiallyUnowned], name = 0x7ffff423d2ba "selection-get", destroyed = 0, flags = 2, n_params = 3, single_va_closure_is_valid = 1, single_va_closure_is_after = 1, param_types = 0x55555564e410, return_type = 0x4, class_closure_bsa = 0x55555560a040, accumulator = 0x0, c_marshaller = 0x7ffff3e85a90 <_gtk_marshal_VOID__BOXED_UINT_UINT>, va_marshaller = 0x7ffff3e89c50 <_gtk_marshal_VOID__BOXED_UINT_UINTv>, emission_hooks = 0x0, single_va_closure = 0x555555647e40}
__func__ = "signal_emit_valist_unlocked"
#66 0x00007ffff408221a in gtk_selection_invoke_handler (widget=0x5555590e3080 [GtkInvisible], data=0x7fffffffd3c0, time=0) at ../gtk/gtkselection.c:3230
target_list = <optimized out>
info = 0
__func__ = "gtk_selection_invoke_handler"
#67 0x00007ffff4088cf0 in _gtk_selection_request (widget=0x5555590e3080 [GtkInvisible], event=event@entry=0x5555587fae90) at ../gtk/gtkselection.c:2617
data = {selection = 0x45, target = 0x48, type = 0x25, format = 2106020864, data = 0x0, length = -1, display = 0x5555555ea6d0 [GdkWaylandDisplay]}
items = 140733193388040
display = <optimized out>
info = 0x555557d32240
tmp_list = <optimized out>
i = 0
selection_max_size = 2147483647
__func__ = "_gtk_selection_request"
#72 0x00007ffff592b423 in <emit signal '???' on instance 0x5555590e3080 [GtkInvisible]> (instance=instance@entry=0x5555590e3080, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3583
var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffd7d0, reg_save_area = 0x7fffffffd710}}
#68 0x00007ffff3e888d9 in _gtk_marshal_BOOLEAN__BOXEDv
(closure=0x555555648170, return_value=0x7fffffffd600, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x55555564f780) at gtk/gtkmarshalers.c:130
cc = 0x555555648170
data1 = <optimized out>
data2 = 0x555555639c40
callback = 0x7ffff4088a60 <_gtk_selection_request>
v_return = <optimized out>
arg0 = 0x5555587fae90
args_copy = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffd7d0, reg_save_area = 0x7fffffffd710}}
__func__ = "_gtk_marshal_BOOLEAN__BOXEDv"
#69 0x00007ffff592b254 in _g_closure_invoke_va (closure=0x555555648170, return_value=0x7fffffffd600, instance=0x5555590e3080, args=0x7fffffffd6f0, n_params=<optimized out>, param_types=0x55555564f780) at ../gobject/gclosure.c:897
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = 0
real_closure = 0x555555648150
real_closure = <optimized out>
__func__ = {<optimized out> <repeats 21 times>}
_g_boolean_var_50 = <optimized out>
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = <optimized out>
_g_boolean_var_51 = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = {closure = {ref_count = <optimized out>, meta_marshal_nouse = <optimized out>, n_guards = <optimized out>, n_fnotifiers = <optimized out>, n_inotifiers = <optimized out>, in_inotify = <optimized out>, floating = <optimized out>, derivative_flag = <optimized out>, in_marshal = <optimized out>, is_invalid = <optimized out>, marshal = <optimized out>, data = <optimized out>, notifiers = <optimized out>}, vint = <optimized out>}
gaicae_oldval = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = {closure = {ref_count = <optimized out>, meta_marshal_nouse = <optimized out>, n_guards = <optimized out>, n_fnotifiers = <optimized out>, n_inotifiers = <optimized out>, in_inotify = <optimized out>, floating = <optimized out>, derivative_flag = <optimized out>, in_marshal = <optimized out>, is_invalid = <optimized out>, marshal = <optimized out>, data = <optimized out>, notifiers = <optimized out>}, vint = <optimized out>}
gaicae_oldval = <optimized out>
#70 signal_emit_valist_unlocked (instance=instance@entry=0x5555590e3080, signal_id=signal_id@entry=108, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffd6f0) at ../gobject/gsignal.c:3424
return_accu = 0x7fffffffd600
accu = {g_type = 0x14, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
emission = {next = 0x0, instance = 0x5555590e3080, ihint = {signal_id = 108, detail = 0, run_type = (G_SIGNAL_RUN_LAST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x55555574b2a0 [GtkInvisible/GtkWidget/GInitiallyUnowned]}
instance_type = 0x55555574b2a0 [GtkInvisible/GtkWidget/GInitiallyUnowned]
emission_return = {g_type = 0x14, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
rtype = 0x14
static_scope = <optimized out>
fastpath_handler = <optimized out>
closure = <optimized out>
run_type = <optimized out>
hlist = <optimized out>
l = <optimized out>
fastpath = <optimized out>
instance_and_params = <optimized out>
param_values = <optimized out>
node = <optimized out>
i = <optimized out>
node_copy = {signal_id = 108, itype = 0x555555639c40 [GtkWidget/GInitiallyUnowned], name = 0x7ffff4242aba "selection-request-event", destroyed = 0, flags = 2, n_params = 1, single_va_closure_is_valid = 1, single_va_closure_is_after = 1, param_types = 0x55555564f780, return_type = 0x14, class_closure_bsa = 0x5555556090b0, accumulator = 0x55555560a180, c_marshaller = 0x7ffff3e8d730 <_gtk_marshal_BOOLEAN__BOXED>, va_marshaller = 0x7ffff3e88830 <_gtk_marshal_BOOLEAN__BOXEDv>, emission_hooks = 0x0, single_va_closure = 0x555555648170}
__func__ = "signal_emit_valist_unlocked"
#71 0x00007ffff592b361 in g_signal_emit_valist (instance=0x5555590e3080, signal_id=108, detail=0, var_args=var_args@entry=0x7fffffffd6f0) at ../gobject/gsignal.c:3263
#73 0x00007ffff415fe3c in gtk_widget_event_internal.part.0.lto_priv.0 (widget=0x5555590e3080 [GtkInvisible], event=0x5555587fae90) at ../gtk/gtkwidget.c:7812
signal_num = <optimized out>
return_val = <optimized out>
handled = 0
__func__ = {<optimized out> <repeats 26 times>}
#74 0x00007ffff3ff543c in gtk_main_do_event (event=<optimized out>) at ../gtk/gtkmain.c:1861
grab_widget = 0x5555590e3080 [GtkInvisible]
window_group = 0x555558032b70 [GtkWindowGroup]
rewritten_event = <optimized out>
device = <optimized out>
tmp_list = <optimized out>
event_widget = 0x5555590e3080 [GtkInvisible]
topmost_widget = <optimized out>
event_widget = <optimized out>
grab_widget = <optimized out>
topmost_widget = <optimized out>
window_group = <optimized out>
rewritten_event = <optimized out>
device = <optimized out>
tmp_list = <optimized out>
cleanup = <optimized out>
__func__ = {<optimized out> <repeats 18 times>}
__inst = <optimized out>
__t = <optimized out>
__r = <optimized out>
window = <optimized out>
__inst = <optimized out>
__t = <optimized out>
__r = <optimized out>
__inst = <optimized out>
__t = <optimized out>
__r = <optimized out>
mnemonics_visible = <optimized out>
window = <optimized out>
__inst = <optimized out>
__t = <optimized out>
__r = <optimized out>
#75 gtk_main_do_event (event=<optimized out>) at ../gtk/gtkmain.c:1691
event_widget = <optimized out>
window_group = <optimized out>
device = <optimized out>
tmp_list = <optimized out>
cleanup = <optimized out>
__func__ = "gtk_main_do_event"
__inst = <optimized out>
__t = <optimized out>
__r = <optimized out>
window = <optimized out>
__inst = <optimized out>
__t = <optimized out>
__r = <optimized out>
__inst = <optimized out>
__t = <optimized out>
__r = <optimized out>
mnemonics_visible = <optimized out>
window = <optimized out>
__inst = <optimized out>
__t = <optimized out>
__r = <optimized out>
#76 0x00007ffff3d34807 in _gdk_event_emit (event=0x5555587fae90) at ../gdk/gdkevents.c:73
#77 _gdk_event_emit (event=0x5555587fae90) at ../gdk/gdkevents.c:67
#78 0x00007ffff3d6e3ce in gdk_event_source_dispatch (base=<optimized out>, callback=<optimized out>, data=<optimized out>) at ../gdk/wayland/gdkeventsource.c:124
source = <optimized out>
display = <optimized out>
event = 0x5555587fae90
#79 0x00007ffff650ee8c in g_main_dispatch (context=0x5555555d6500) at ../glib/gmain.c:3344
dispatch = 0x7ffff3d6e3a0 <gdk_event_source_dispatch>
prev_source = 0x0
begin_time_nsec = 15123475375227
was_in_call = 0
user_data = 0x0
callback = 0x0
cb_funcs = 0x0
cb_data = 0x0
need_destroy = <optimized out>
source = 0x555555601e40
current = 0x5555555db790
i = 0
__func__ = {<optimized out> <repeats 16 times>}
#80 g_main_context_dispatch_unlocked (context=0x5555555d6500) at ../glib/gmain.c:4152
#81 0x00007ffff6570c98 in g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x5555555d6500, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4217
max_priority = 0
timeout = 0
some_ready = 1
nfds = 4
allocated_nfds = <optimized out>
fds = 0x555557e5e540
begin_time_nsec = 15123475372710
#82 0x00007ffff6510383 in g_main_context_iteration (context=context@entry=0x5555555d6500, may_block=may_block@entry=1) at ../glib/gmain.c:4282
retval = <optimized out>
#83 0x00007ffff55130fd in g_application_run (application=0x555555729f60 [gtkmm__GtkApplication], argc=<optimized out>, argv=0x5555555b0ed0) at ../gio/gapplication.c:2712
arguments = 0x5555555b0f30
status = 0
context = 0x5555555d6500
acquired_context = <optimized out>
__func__ = "g_application_run"
#84 0x0000555555557041 in main () at /usr/src/debug/inkscape-1.3.2-8.fc40.x86_64/src/inkscape-main.cpp:232