https://bugs.kde.org/show_bug.cgi?id=338012

Matt Whitlock <k...@mattwhitlock.name> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |k...@mattwhitlock.name

--- Comment #6 from Matt Whitlock <k...@mattwhitlock.name> ---
I have been experiencing this crash for years and am still seeing it in
Oxygen-Gtk2 1.4.6. Here is some more information.

#6  <signal handler called>
#7  0x00007f724774a012 in IA__gtk_tree_view_get_background_area
(tree_view=tree_view@entry=0x7f72b9630b50, path=0x7f72b8a2cdb0, 
    column=0x7f72b92b5840, rect=rect@entry=0x7f72be2345b0) at
../../gtk+-2.24.31/gtk/gtktreeview.c:13035
#8  0x00007f7247434af5 in Oxygen::Gtk::CellInfo::backgroundRect
(this=this@entry=0x7f72b9771320, 
    treeView=treeView@entry=0x7f72b9630b50) at
../../oxygen-gtk2-1.4.6/src/oxygengtkcellinfo.cpp:206
#9  0x00007f7247425fbd in Oxygen::TreeViewStateData::dirtyRect
(this=this@entry=0x7f72b9771278)
    at ../../oxygen-gtk2-1.4.6/src/animations/oxygentreeviewstatedata.cpp:129
#10 0x00007f7247426130 in Oxygen::TreeViewStateData::delayedUpdate
(pointer=0x7f72b9771278)
    at ../../oxygen-gtk2-1.4.6/src/animations/oxygentreeviewstatedata.cpp:176
#11 0x00007f7247425c89 in Oxygen::TreeViewStateData::updateState
(this=this@entry=0x7f72b9771278, info=..., state=<optimized out>)
    at ../../oxygen-gtk2-1.4.6/src/animations/oxygentreeviewstatedata.cpp:91
#12 0x00007f7247403f0e in Oxygen::TreeViewStateEngine::get
(this=0x7f72b83329d0, widget=<optimized out>, info=..., options=...)
    at ../../oxygen-gtk2-1.4.6/src/animations/oxygentreeviewstateengine.h:92
#13 0x00007f72474ad850 in Oxygen::draw_expander (style=<optimized out>,
window=0x7f72b9d9ba20, state=<optimized out>, 
    clipRect=0x7f72be234840, widget=0x7f72b9630b50, detail=0x7f72477e0ba6
"treeview", x=6, y=10, 
    expanderStyle=GTK_EXPANDER_COLLAPSED) at
../../oxygen-gtk2-1.4.6/src/oxygenstylewrapper.cpp:2738
#14 0x00007f724773d6fa in gtk_tree_view_draw_arrow
(tree_view=tree_view@entry=0x7f72b9630b50, tree=tree@entry=0x7f72b904d7d0, 
    node=node@entry=0x7f72b9335120, x=x@entry=0, y=y@entry=7) at
../../gtk+-2.24.31/gtk/gtktreeview.c:9576
#15 0x00007f7247743ba0 in do_prelight
(tree_view=tree_view@entry=0x7f72b9630b50, tree=0x7f72b904d7d0,
node=0x7f72b9335120, x=0, 
    y=7) at ../../gtk+-2.24.31/gtk/gtktreeview.c:3270
#16 0x00007f724774b134 in prelight_or_select
(tree_view=tree_view@entry=0x7f72b9630b50, tree=<optimized out>, 
    node=<optimized out>, x=<optimized out>, y=<optimized out>) at
../../gtk+-2.24.31/gtk/gtktreeview.c:3320
#17 0x00007f724774da25 in gtk_tree_view_enter_notify
(widget=widget@entry=0x7f72b9630b50, event=0x7f72b8f0bca0)
    at ../../gtk+-2.24.31/gtk/gtktreeview.c:5620

(gdb) frame 9
#9  0x00007f7247425fbd in Oxygen::TreeViewStateData::dirtyRect
(this=this@entry=0x7f72b9771278)
    at ../../oxygen-gtk2-1.4.6/src/animations/oxygentreeviewstatedata.cpp:129
129                 const GdkRectangle previousRect(
_previous._info.backgroundRect( treeView ) );

(gdb) frame 8
#8  0x00007f7247434af5 in Oxygen::Gtk::CellInfo::backgroundRect
(this=this@entry=0x7f72b9771320,
    treeView=treeView@entry=0x7f72b9630b50) at
../../oxygen-gtk2-1.4.6/src/oxygengtkcellinfo.cpp:206
206             { gtk_tree_view_get_background_area( treeView, _path, _column,
&out ); }

(gdb) frame 7
#7  0x00007f724774a012 in IA__gtk_tree_view_get_background_area
(tree_view=tree_view@entry=0x7f72b9630b50, path=0x7f72b8a2cdb0,
    column=0x7f72b92b5840, rect=rect@entry=0x7f72be2345b0) at
../../gtk+-2.24.31/gtk/gtktreeview.c:13035
13035     g_return_if_fail (column == NULL || GTK_IS_TREE_VIEW_COLUMN
(column));

(gdb) print *column
$1 = {parent = {parent_instance = {g_type_instance = {g_class =
0x3f0000003f000000}, ref_count = 0, qdata = 0xa}, flags = 0},
  tree_view = 0x0, button = 0x0, child = 0x7f72b8ac0180, arrow = 0x1, alignment
= 0x7f72b8f0da30, window = 0x310fe0,
  editable_widget = 0xe00, xalign = 0, property_changed_signal = 0, spacing =
-1185748944,
  column_type = (GTK_TREE_VIEW_COLUMN_FIXED | unknown: 32624), requested_width
= 28, button_request = 25, resized_width = 96,
  width = 0, fixed_width = 28, min_width = 25, max_width = -1184045376, drag_x
= 32626, drag_y = -1180018624, title = 0x0,
  cell_list = 0x0, sort_clicked_signal = 3093474752, sort_column_changed_signal
= 32626, sort_column_id = -1188131744,
  sort_order = (unknown: 32626), visible = 0, resizable = 0, clickable = 0,
dirty = 0, show_sort_indicator = 0,
  maybe_reordered = 0, reorderable = 0, use_resized_width = 0, expand = 0}

As you can see, Oxygen-Gtk is attempting to check that the
Oxygen::Gtk::CellInfo::_column data member points to a valid GtkTreeViewColumn,
but the referent of the pointer has already been freed, leaving a garbage
address in g_class, which causes the G_TYPE_CHECK_INSTANCE_TYPE in
GTK_IS_TREE_VIEW_COLUMN to segfault.

Probably Oxygen::Gtk::CellInfo should not be holding onto a pointer to a
GtkTreeViewColumn instance without incrementing its reference count.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to