Bug 406931

Summary: crash when filtering class list
Product: [Applications] kdevelop Reporter: Rolf Eike Beer <kde>
Component: generalAssignee: kdevelop-bugs-null
Status: RESOLVED FIXED    
Severity: crash    
Priority: NOR    
Version First Reported In: git master   
Target Milestone: ---   
Platform: Other   
OS: Linux   
Latest Commit: Version Fixed/Implemented In: 5.4.3
Sentry Crash Report:

Description Rolf Eike Beer 2019-04-26 19:24:18 UTC
STEPS TO REPRODUCE
1. open class pane on left side
2. expand something, i.e. into derived classes, select a method
3. now enter a filter expression that will exclude this class

OBSERVED RESULT
#6  0x00007fb12365dbc4 in QListData::size (this=0x707070504050017) at /usr/
include/qt5/QtCore/qlist.h:113
#7  0x00007fb1238511d2 in QList<ClassModelNodes::Node*>::indexOf 
(this=0x707070504050017, t=@0x7ffd1980e8c8: 0x2172010, from=0) at /usr/
include/qt5/QtCore/qlist.h:975
#8  0x00007fb12384ffe2 in ClassModelNodes::Node::row (this=0x2172010) at /
home/ebeer/repos/upstream/KDE/kdevelop/kdevplatform/language/classmodel/
classmodelnode.cpp:494
#9  0x00007fb12384ba6c in ClassModel::index (this=0x3cc3610, a_node=0x2172010) 
at /home/ebeer/repos/upstream/KDE/kdevelop/kdevplatform/language/classmodel/
classmodel.cpp:190
#10 0x00007fb12384ba08 in ClassModel::parent (this=0x3cc3610, childIndex=...) 
at /home/ebeer/repos/upstream/KDE/kdevelop/kdevplatform/language/classmodel/
classmodel.cpp:177
#11 0x00007fb120a7a961 in 
QAbstractItemModelPrivate::rowsAboutToBeRemoved(QModelIndex const&, int, int) 
() from /usr/lib64/libQt5Core.so.5
#12 0x00007fb120a7d9a5 in QAbstractItemModel::beginRemoveRows(QModelIndex 
const&, int, int) () from /usr/lib64/libQt5Core.so.5
#13 0x00007fb12384bdb5 in ClassModel::nodesAboutToBeRemoved (this=0x3cc3610, 
a_parent=0x4ebe390, a_first=0, a_last=20) at /home/ebeer/repos/upstream/KDE/
kdevelop/kdevplatform/language/classmodel/classmodel.cpp:243
#14 0x00007fb12384fc9d in ClassModelNodes::Node::~Node (this=0x4ebe390, 
__in_chrg=<optimized out>) at /home/ebeer/repos/upstream/KDE/kdevelop/
kdevplatform/language/classmodel/classmodelnode.cpp:427
#15 0x00007fb123850492 in ClassModelNodes::DynamicNode::~DynamicNode 
(this=0x4ebe390, __in_chrg=<optimized out>) at /home/ebeer/repos/upstream/KDE/
kdevelop/kdevplatform/language/classmodel/classmodelnode.h:124
#16 0x00007fb123850502 in ClassModelNodes::IdentifierNode::~IdentifierNode 
(this=0x4ebe390, __in_chrg=<optimized out>) at /home/ebeer/repos/upstream/KDE/
kdevelop/kdevplatform/language/classmodel/classmodelnode.h:161
#17 0x00007fb12384e37e in ClassModelNodes::ClassNode::~ClassNode 
(this=0x4ebe390, __in_chrg=<optimized out>) at /home/ebeer/repos/upstream/KDE/
kdevelop/kdevplatform/language/classmodel/classmodelnode.cpp:127
#18 0x00007fb12384e3a2 in ClassModelNodes::ClassNode::~ClassNode 
(this=0x4ebe390, __in_chrg=<optimized out>) at /home/ebeer/repos/upstream/KDE/
kdevelop/kdevplatform/language/classmodel/classmodelnode.cpp:133
#19 0x00007fb123851a54 in 
qDeleteAll<QList<ClassModelNodes::Node*>::const_iterator> (begin=..., end=...) 
at /usr/include/qt5/QtCore/qalgorithms.h:320
#20 0x00007fb123850efc in qDeleteAll<QList<ClassModelNodes::Node*> > (c=...) 
at /usr/include/qt5/QtCore/qalgorithms.h:328
#21 0x00007fb12384fd4c in ClassModelNodes::Node::clear (this=0x4e87f90) at /
home/ebeer/repos/upstream/KDE/kdevelop/kdevplatform/language/classmodel/
classmodelnode.cpp:435
#22 0x00007fb123850185 in ClassModelNodes::DynamicNode::performNodeCleanup 
(this=0x4e87f90) at /home/ebeer/repos/upstream/KDE/kdevelop/kdevplatform/
language/classmodel/classmodelnode.cpp:537
#23 0x00007fb123850205 in ClassModelNodes::DynamicNode::performPopulateNode 
(this=0x4e87f90, a_forceRepopulate=true) at /home/ebeer/repos/upstream/KDE/
kdevelop/kdevplatform/language/classmodel/classmodelnode.cpp:554
#24 0x00007fb12385e599 in 
ClassModelNodes::FilteredProjectFolder::updateFilterString (this=0x4e87f80, 
a_newF

SOFTWARE/OS VERSIONS
openSUSE Tumbleweed
Qt 5.12.2
built this morning
Comment 1 Milian Wolff 2019-09-20 04:11:19 UTC
Git commit 5bff5d65a023cfce078c0abc7f82b9899f49fffb by Milian Wolff, on behalf of Marcin Dłubakowski.
Committed on 20/09/2019 at 04:10.
Pushed by mwolff into branch '5.4'.

Fixed crash when filtering class list

Issue: When you select an inner node (method or member) in classes
panel, then type something in search bar that filters that node out,
Kdevelop crashes. It seems that when nodes get filtered, at some
point currentIndex of QTreeView points to deleted node, which causes
segfault in ClassModel::hasChildren. Manually invalidating
currentIndex before filtering seems to have fixed the issue.

Differential Revision: https://phabricator.kde.org/D22660

M  +1    -0    plugins/classbrowser/classwidget.cpp

https://invent.kde.org/kde/kdevelop/commit/5bff5d65a023cfce078c0abc7f82b9899f49fffb