Bug 94520 - Invalid memory access in feed tree
Summary: Invalid memory access in feed tree
Status: RESOLVED FIXED
Alias: None
Product: akregator
Classification: Applications
Component: general (show other bugs)
Version: cvs
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: kdepim bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-12-06 05:22 UTC by George Staikos
Modified: 2004-12-12 19:22 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description George Staikos 2004-12-06 05:22:21 UTC
RMB->Delete a feed and this happens. 
 
==4163== 29 errors in context 9 of 11:  
==4163== Invalid read of size 1  
==4163==    at 0x4190AAAE: QListViewItem::isSelected() const  
(widgets/qlistview.h:126)  
==4163==    by 0x41099CD0: KListView::contentsMouseMoveEvent(QMouseEvent*)  
(klistview.cpp:794)  
==4163==    by 0x4193332E: QScrollView::viewportMouseMoveEvent(QMouseEvent*)  
(widgets/qscrollview.cpp:1782)  
==4163==    by 0x419328B1: QScrollView::eventFilter(QObject*, QEvent*)  
(widgets/qscrollview.cpp:1512)  
==4163==    by 0x418FCA08: QListView::eventFilter(QObject*, QEvent*)  
(widgets/qlistview.cpp:3833)  
==4163==    by 0x4180B93F: QObject::activate_filters(QEvent*)  
(kernel/qobject.cpp:902)  
==4163==    by 0x4180B7B1: QObject::event(QEvent*) (kernel/qobject.cpp:735)  
==4163==    by 0x41846052: QWidget::event(QEvent*) (kernel/qwidget.cpp:4653)  
==4163==    by 0x417AB7A0: QApplication::internalNotify(QObject*, QEvent*)  
(kernel/qapplication.cpp:2620)  
==4163==    by 0x417AAF56: QApplication::notify(QObject*, QEvent*)  
(kernel/qapplication.cpp:2406)  
==4163==    by 0x412EC4FA: KApplication::notify(QObject*, QEvent*)  
(kapplication.cpp:528)  
==4163==    by 0x417411D2: QApplication::sendSpontaneousEvent(QObject*,  
QEvent*) (kernel/qapplication.h:494)  
==4163==    by 0x4173A1DE: QETWidget::translateMouseEvent(_XEvent const*)  
(kernel/qapplication_x11.cpp:4257)  
==4163==    by 0x41737E3E: QApplication::x11ProcessEvent(_XEvent*)  
(kernel/qapplication_x11.cpp:3408)  
==4163==    by 0x41752569: QEventLoop::processEvents(unsigned)  
(kernel/qeventloop_x11.cpp:192)  
==4163==    by 0x417BFACD: QEventLoop::enterLoop() (kernel/qeventloop.cpp:198)  
==4163==    by 0x417BF9E9: QEventLoop::exec() (kernel/qeventloop.cpp:145)  
==4163==    by 0x417AB920: QApplication::exec() (kernel/qapplication.cpp:2743)  
==4163==    by 0x80501C2: main (main.cpp:66)  
==4163==    by 0x420768AD: __libc_start_main (in /lib/libc.so.6)  
==4163==    by 0x8050060: (within /opt/kde-devel/bin/akregator)  
==4163==    Address 0x48501E7A is 18 bytes inside a block of size 52 free'd  
==4163==    at 0x40027ED7: __builtin_delete (vg_replace_malloc.c:244)  
==4163==    by 0x40027EF5: operator delete(void*) (vg_replace_malloc.c:253)  
==4163==    by 0x4B21C3FF: Akregator::FeedItem::~FeedItem() (feeditem.cpp:58)  
==4163==    by 0x4B1FA333:  
Akregator::FeedsTree::slotNodeDestroyed(Akregator::TreeNode*)  
(feedstree.cpp:645)  
==4163==    by 0x4B1FA9A3: Akregator::FeedsTree::qt_invoke(int, QUObject*)  
(/opt/qt-copy/include/private/qucom_p.h:312)  
==4163==    by 0x4180E02D: QObject::activate_signal(QConnectionList*,  
QUObject*) (kernel/qobject.cpp:2380)  
==4163==    by 0x4B21AB17:  
Akregator::TreeNode::signalDestroyed(Akregator::TreeNode*) (treenode.moc:130)  
==4163==    by 0x4B21A488: Akregator::TreeNode::~TreeNode() (treenode.cpp:23)  
==4163==    by 0x4B1FBF73: Akregator::Feed::~Feed()  
(/opt/qt-copy/include/qstring.h:848)  
==4163==    by 0x4B22DF64: Akregator::aKregatorView::slotFeedRemove()  
(akregator_view.cpp:1025)  
==4163==    by 0x4B231309: Akregator::aKregatorView::qt_invoke(int, QUObject*)  
(akregator_view.moc:318)  
==4163==    by 0x4180DEE0: QObject::activate_signal(QConnectionList*,  
QUObject*) (kernel/qobject.cpp:2356)  
==4163==    by 0x4180DD7F: QObject::activate_signal(int)  
(kernel/qobject.cpp:2325)  
==4163==    by 0x41068EF5: KAction::activated()  
(/opt/qt-copy/include/qmetaobject.h:261)  
==4163==    by 0x41068535: KAction::slotActivated() (kaction.cpp:1102)  
==4163==    by 0x41068FA4: KAction::qt_invoke(int, QUObject*) (kaction.moc:181)  
==4163==    by 0x4180DEE0: QObject::activate_signal(QConnectionList*,  
QUObject*) (kernel/qobject.cpp:2356)  
==4163==    by 0x41B66833: QSignal::signal(QVariant const&)  
(.moc/debug-shared-mt/moc_qsignal.cpp:100)  
==4163==    by 0x4182B4F2: QSignal::activate() (kernel/qsignal.cpp:212)  
==4163==    by 0x41923597: QPopupMenu::mouseReleaseEvent(QMouseEvent*)  
(widgets/qpopupmenu.cpp:1689)  
==4163==    by 0x4184612E: QWidget::event(QEvent*) (kernel/qwidget.cpp:4671)  
==4163==    by 0x417AB7A0: QApplication::internalNotify(QObject*, QEvent*)  
(kernel/qapplication.cpp:2620)  
==4163==    by 0x417AAF56: QApplication::notify(QObject*, QEvent*)  
(kernel/qapplication.cpp:2406)  
==4163==    by 0x412EC4FA: KApplication::notify(QObject*, QEvent*)  
(kapplication.cpp:528)  
==4163==    by 0x417411D2: QApplication::sendSpontaneousEvent(QObject*,  
QEvent*) (kernel/qapplication.h:494)  
==4163==    by 0x41739F5D: QETWidget::translateMouseEvent(_XEvent const*)  
(kernel/qapplication_x11.cpp:4199)  
==4163==    by 0x41737E3E: QApplication::x11ProcessEvent(_XEvent*)  
(kernel/qapplication_x11.cpp:3408)  
==4163==    by 0x41752569: QEventLoop::processEvents(unsigned)  
(kernel/qeventloop_x11.cpp:192)  
==4163==    by 0x417BFACD: QEventLoop::enterLoop() (kernel/qeventloop.cpp:198)  
==4163==    by 0x417AB98A: QApplication::enter_loop()  
(kernel/qapplication.cpp:2775)  
==4163==    by 0x41926778: QPopupMenu::exec(QPoint const&, int)  
(widgets/qpopupmenu.cpp:2422)  
==4163==    by 0x4B22CF70:  
Akregator::aKregatorView::slotFeedTreeContextMenu(KListView*, QListViewItem*,  
QPoint const&) (akregator_view.cpp:741)  
==4163==    by 0x4B231445: Akregator::aKregatorView::qt_invoke(int, QUObject*)  
(/opt/qt-copy/include/private/qucom_p.h:312)  
==4163==    by 0x4180DEE0: QObject::activate_signal(QConnectionList*,  
QUObject*) (kernel/qobject.cpp:2356)  
==4163==    by 0x410A0968: KListView::contextMenu(KListView*, QListViewItem*,  
QPoint const&) (klistview.moc:518)  
==4163==    by 0x4109CF42: KListView::emitContextMenu(QListViewItem*, QPoint  
const&, int) (klistview.cpp:1888)  
==4163==    by 0x410A0BD4: KListView::qt_invoke(int, QUObject*)  
(/opt/qt-copy/include/private/qucom_p.h:312)  
==4163==    by 0x4B1FA8DB: Akregator::FeedsTree::qt_invoke(int, QUObject*)  
(feedstree.moc:237)  
==4163==    by 0x4180DEE0: QObject::activate_signal(QConnectionList*,  
QUObject*) (kernel/qobject.cpp:2356)  
==4163==    by 0x41B7C4BC: QListView::rightButtonPressed(QListViewItem*,  
QPointconst&, int) (.moc/debug-shared-mt/moc_qlistview.cpp:468)
Comment 1 Frank Osterfeld 2004-12-07 11:15:30 UTC
CVS commit by osterfeld: 

after deleting a node, select the item below/above
Please check if that fixes 94520 (my valgrind went bonkers)

CCBUG: 94520


  M +1 -6      akregator_view.cpp   1.190
  M +4 -3      articlelist.cpp   1.33
  M +10 -1     feedstree.cpp   1.31


--- kdenonbeta/akregator/src/akregator_view.cpp  #1.189:1.190
@@ -998,10 +998,5 @@ void aKregatorView::slotFeedRemove()
     {
         delete selectedNode;
-        if (m_tree->currentItem()) {
-            m_tree->currentItem()->setSelected(true);
-            slotNodeSelected(m_tree->selectedNode());
-        }
         m_tree->setFocus();
-        //m_part->setModified(true);
     }
 }

--- kdenonbeta/akregator/src/articlelist.cpp  #1.32:1.33
@@ -176,4 +176,6 @@ void ArticleList::slotShowNode(TreeNode*
     connect(node, SIGNAL(signalDestroyed(TreeNode*)), this, SLOT(slotClear()) );
     
+    m_node = node;
+        
     clear();
     
@@ -189,5 +191,4 @@ void ArticleList::slotShowNode(TreeNode*
         m_columnMode = feedMode;
     }
-    m_node = node;
     
     slotUpdate();

--- kdenonbeta/akregator/src/feedstree.cpp  #1.30:1.31
@@ -643,6 +643,15 @@ void FeedsTree::disconnectFromNode(TreeN
 void FeedsTree::slotNodeDestroyed(TreeNode* node)
 {
-    delete findNodeItem(node);
+    TreeNodeItem* item = findNodeItem(node);
     m_itemDict.remove(node);
+
+    if ( item->isSelected() )
+    {
+        if (item->itemBelow())
+            item->itemBelow()->setSelected(true);
+        else if (item->itemAbove())
+            item->itemAbove()->setSelected(true);
+    }
+    delete item;
 }
 


Comment 2 George Staikos 2004-12-12 19:22:48 UTC
*** Bug has been marked as fixed ***.