Bug 113758 - Akregator crashes reliably with some feeds.
Summary: Akregator crashes reliably with some feeds.
Status: CLOSED FIXED
Alias: None
Product: akregator
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: VHI crash
Target Milestone: ---
Assignee: kdepim bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-10-03 05:34 UTC by Jim Dabell
Modified: 2005-10-19 16:14 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments
Sample feed that crashes Akregator (15.23 KB, text/xml)
2005-10-03 05:35 UTC, Jim Dabell
Details
Another sample feed that crashes Akregator (8.70 KB, text/xml)
2005-10-03 05:36 UTC, Jim Dabell
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Jim Dabell 2005-10-03 05:34:35 UTC
Version:           3.5 Beta 1 (using KDE Devel)
Installed from:    Compiled sources
Compiler:          GCC 3.4.3 
OS:                Linux

Akregator segfaults when attempting to read two particular feeds.

http://www.clagnut.com/rss/

http://www.clagnut.com/rss/blogmarks/
Comment 1 Jim Dabell 2005-10-03 05:35:54 UTC
Created attachment 12821 [details]
Sample feed that crashes Akregator
Comment 2 Jim Dabell 2005-10-03 05:36:27 UTC
Created attachment 12822 [details]
Another sample feed that crashes Akregator
Comment 3 Frank Osterfeld 2005-10-03 12:01:33 UTC
Confirmed. Caused by metakit backend, category handling.

Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
[Thread debugging using libthread_db enabled]
[New Thread -1241943392 (LWP 22483)]
[KCrash handler]
#7  0xb5ac2b92 in c4_FormatV::Replace (this=0x948d700, index_=0, 
    seq_=0x95132c8) at format.cpp:1137
#8  0xb5ac2b21 in c4_FormatV::Set (this=0x948d700, index_=0, buf_=@0x66206568)
    at format.cpp:1115
#9  0xb5ad2a2a in c4_Sequence::SetAt (this=0x8397248, index_=0, newElem_=
      {_seq = 0x9612070, _index = 1}) at viewx.cpp:116
#10 0xb5ad1d2b in c4_Row::operator= (this=0xbfffcf70, rowRef_=@0x66206568)
    at mk4.inl:13
#11 0xb5aac21d in Akregator::Backend::FeedStorageMK4Impl::addCategory (
    this=0x930aba8, guid=@0x94998a0, cat=@0xbfffd0f0) at mk4.inl:848
#12 0xb7f8fdab in Akregator::Article::initialize (this=0xbfffd340, 
    article=<incomplete type>, archive=0x66206568) at article.cpp:131
#13 0xb7f90749 in Article (this=0xbfffd340, article=<incomplete type>, 
    feed=0x930aba8) at article.cpp:176
#14 0xb7f94bed in Akregator::Feed::appendArticles (this=0x9523350, 
    doc=@0x66206568) at qvaluelist.h:186
#15 0xb7f95a05 in Akregator::Feed::fetchCompleted (this=0x9523350, 
    l=0xbfffd470, doc={d = 0x83b5a60}, status=1713399144) at feed.cpp:621
#16 0xb7f97105 in Akregator::Feed::qt_invoke (this=0x9523350, _id=-1073752752, 
    _o=0xbfffd5f0) at qucom_p.h:312
#17 0xb6698067 in QObject::activate_signal ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#18 0xb7fde56c in RSS::Loader::loadingComplete (this=0x9500db8, t0=0x66206568, 
    t1=) at loader.moc:428
#19 0xb7fdce4e in RSS::Loader::slotRetrieverDone (this=0x9500db8, 
    data=@0x66206568, success=true) at loader.cpp:355
#20 0xb7fde5fd in RSS::Loader::qt_invoke (this=0x9500db8, _id=2, _o=0xbfffd7d0)
    at qucom_p.h:312
#21 0xb6698067 in QObject::activate_signal ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#22 0xb7fddc09 in RSS::DataRetriever::dataRetrieved (this=0xbfffd80c, 
    t0=@0x66206568, t1=true) at loader.moc:97
#23 0xb7fdc369 in RSS::FileRetriever::slotResult (this=0x954fc30, 
    job=0x66206568) at loader.cpp:134
#24 0xb7fddfe9 in RSS::FileRetriever::qt_invoke (this=0x954fc30, _id=4, 
    _o=0xbfffd920) at qucom_p.h:312
#25 0xb6698067 in QObject::activate_signal ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#26 0xb728fcea in KIO::Job::result (this=0x93f6e90, t0=0x66206568)
    at jobclasses.moc:162
#27 0xb72744ec in KIO::Job::emitResult (this=0x93f6e90) at job.cpp:222
#28 0xb72762cc in KIO::SimpleJob::slotFinished (this=0x93f6e90) at job.cpp:570
#29 0xb727a08e in KIO::TransferJob::slotFinished (this=0x93f6e90)
    at job.cpp:938
#30 0xb7291dcd in KIO::TransferJob::qt_invoke (this=0x93f6e90, _id=17, 
    _o=0xbfffdcc0) at jobclasses.moc:1071
#31 0xb6698067 in QObject::activate_signal ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#32 0xb6697eae in QObject::activate_signal ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#33 0xb7268dee in KIO::SlaveInterface::finished (this=0x66206568)
    at qmetaobject.h:261
#34 0xb7265bf8 in KIO::SlaveInterface::dispatch (this=0x85d19f8, _cmd=104, 
    rawdata=@0xbfffe060) at slaveinterface.cpp:243
#35 0xb7264ce0 in KIO::SlaveInterface::dispatch (this=0x85d19f8)
    at slaveinterface.cpp:173
#36 0xb7261ae8 in KIO::Slave::gotInput (this=0x85d19f8) at slave.cpp:300
#37 0xb7264428 in KIO::Slave::qt_invoke (this=0x85d19f8, _id=4, _o=0xbfffe1c0)
    at slave.moc:113
#38 0xb6698067 in QObject::activate_signal ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#39 0xb66981be in QObject::activate_signal ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#40 0xb69b3ee0 in QSocketNotifier::activated ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#41 0xb66b3036 in QSocketNotifier::event ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#42 0xb6640370 in QApplication::internalNotify ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#43 0xb663f9d4 in QApplication::notify () from /usr/share/qt3/lib/libqt-mt.so.3
#44 0xb6c55285 in KApplication::notify (this=0xbffff570, receiver=0x958ba70, 
    event=0xbfffe560) at kapplication.cpp:550
#45 0xb6630a10 in QEventLoop::activateSocketNotifiers ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#46 0xb65ec917 in QEventLoop::processEvents ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#47 0xb665174c in QEventLoop::enterLoop ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#48 0xb66405d3 in QApplication::enter_loop ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#49 0xb681220c in QDialog::exec () from /usr/share/qt3/lib/libqt-mt.so.3
#50 0xb5c9d8f8 in Akregator::View::addFeed (this=0x820d598, url=@0x66206568, 
    after=0xb62009fc, parent=0x831c288, autoExec=false)
    at akregator_view.cpp:857
#51 0xb5c9d6eb in Akregator::View::slotFeedAdd (this=0x820d598)
    at akregator_view.cpp:843
#52 0xb5ca1512 in Akregator::View::qt_invoke (this=0x820d598, _id=70, 
    _o=0xbfffe8e0) at akregator_view.moc:390
#53 0xb6698067 in QObject::activate_signal ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#54 0xb6697eae in QObject::activate_signal ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#55 0xb6f70e3b in KAction::activated (this=0x66206568) at qmetaobject.h:261
#56 0xb6f6ff4a in KAction::slotActivated (this=0x8275b78) at kaction.cpp:1102
#57 0xb6f70063 in KAction::slotPopupActivated (this=0x8275b78)
    at kaction.cpp:1137
#58 0xb6f71140 in KAction::qt_invoke (this=0x8275b78, _id=16, _o=0xbfffea90)
    at kaction.moc:219
#59 0xb6698067 in QObject::activate_signal ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#60 0xb69b31a5 in QSignal::signal () from /usr/share/qt3/lib/libqt-mt.so.3
#61 0xb66b0ca9 in QSignal::activate () from /usr/share/qt3/lib/libqt-mt.so.3
#62 0xb6794348 in QPopupMenu::mouseReleaseEvent ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#63 0xb6f5c3a1 in KPopupMenu::mouseReleaseEvent (this=0x81baf00, e=0xbffff050)
    at kpopupmenu.cpp:511
#64 0xb66cb7e9 in QWidget::event () from /usr/share/qt3/lib/libqt-mt.so.3
#65 0xb6640370 in QApplication::internalNotify ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#66 0xb663fac7 in QApplication::notify () from /usr/share/qt3/lib/libqt-mt.so.3
#67 0xb6c55285 in KApplication::notify (this=0xbffff570, receiver=0x81baf00, 
    event=0xbffff050) at kapplication.cpp:550
#68 0xb65d8d1d in QETWidget::translateMouseEvent ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#69 0xb65d6e1c in QApplication::x11ProcessEvent ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#70 0xb65ecec2 in QEventLoop::processEvents ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#71 0xb665174c in QEventLoop::enterLoop ()
   from /usr/share/qt3/lib/libqt-mt.so.3
#72 0xb665160e in QEventLoop::exec () from /usr/share/qt3/lib/libqt-mt.so.3
#73 0xb664057b in QApplication::exec () from /usr/share/qt3/lib/libqt-mt.so.3
#74 0x08050bef in main (argc=1713399144, argv=0x66206568) at main.cpp:110
Comment 4 Frank Osterfeld 2005-10-06 00:32:14 UTC
SVN commit 467681 by osterfeld:

Don't crash when the same category term shows up in different categories. Creating a hash with term as key 
is not a good idea as term is not unique...
BUG: 113758


 M  +10 -7     feedstoragemk4impl.cpp  


--- branches/KDE/3.5/kdepim/akregator/src/mk4storage/feedstoragemk4impl.cpp #467680:467681
@@ -161,9 +161,7 @@
     d->tagView = d->tagView.Hash(hash, 1); // hash on tag
 
     d->catStorage = new c4_Storage((filePath + ".mk4___CATEGORIES").local8Bit(), true);
-    d->catView = d->catStorage->GetAs("tagIndex[catTerm:S,catScheme:S,catName:S,categorizedArticles[guid:S]]");
-    hash = d->catStorage->GetAs("archiveHash[_H:I,_R:I]");
-    d->catView = d->catView.Hash(hash, 1);
+    d->catView = d->catStorage->GetAs("catIndex[catTerm:S,catScheme:S,catName:S,categorizedArticles[guid:S]]");
 }
 
 
@@ -543,12 +541,17 @@
         d->pcatTerm(catrow) = cat.term.utf8().data();
         d->pcatScheme(catrow) = cat.scheme.utf8().data();
         d->pcatName(catrow) = cat.name.utf8().data();
+
         int catidx2 = d->catView.Find(catrow);
+
         if (catidx2 == -1)
+        {
             catidx2 = d->catView.Add(catrow);
-        catrow = d->catView.GetAt(catidx2);
-        c4_View catView2 = d->pcategorizedArticles(catrow);
+        }
 
+        c4_Row catrow2 = d->catView.GetAt(catidx2);
+        c4_View catView2 = d->pcategorizedArticles(catrow2);
+
         c4_Row row3;
         d->pguid(row3) = guid.ascii();
         int guididx = catView2.Find(row3);
@@ -556,8 +559,8 @@
         {
             guididx = catView2.Add(row3);
             catView2.SetAt(guididx, row3);
-            d->pcategorizedArticles(catrow) = catView2;
-            d->catView.SetAt(catidx2, catrow);
+            d->pcategorizedArticles(catrow2) = catView2;
+            d->catView.SetAt(catidx2, catrow2);
         }
 
         d->modified = true;
Comment 5 Frank Osterfeld 2005-10-06 00:33:32 UTC
SVN commit 467682 by osterfeld:

forward port of 113758
CCBUG: 113758


 M  +10 -7     feedstoragemk4impl.cpp  


--- trunk/KDE/kdepim/akregator/src/mk4storage/feedstoragemk4impl.cpp #467681:467682
@@ -162,9 +162,7 @@
     d->tagView = d->tagView.Hash(hash, 1); // hash on tag
 
     d->catStorage = new c4_Storage((filePath + ".mk4___CATEGORIES").local8Bit(), true);
-    d->catView = d->catStorage->GetAs("tagIndex[catTerm:S,catScheme:S,catName:S,categorizedArticles[guid:S]]");
-    hash = d->catStorage->GetAs("archiveHash[_H:I,_R:I]");
-    d->catView = d->catView.Hash(hash, 1);
+    d->catView = d->catStorage->GetAs("catIndex[catTerm:S,catScheme:S,catName:S,categorizedArticles[guid:S]]");
 }
 
 
@@ -544,12 +542,17 @@
         d->pcatTerm(catrow) = cat.term.utf8().data();
         d->pcatScheme(catrow) = cat.scheme.utf8().data();
         d->pcatName(catrow) = cat.name.utf8().data();
+
         int catidx2 = d->catView.Find(catrow);
+
         if (catidx2 == -1)
+        {
             catidx2 = d->catView.Add(catrow);
-        catrow = d->catView.GetAt(catidx2);
-        c4_View catView2 = d->pcategorizedArticles(catrow);
+        }
 
+        c4_Row catrow2 = d->catView.GetAt(catidx2);
+        c4_View catView2 = d->pcategorizedArticles(catrow2);
+
         c4_Row row3;
         d->pguid(row3) = guid.ascii();
         int guididx = catView2.Find(row3);
@@ -557,8 +560,8 @@
         {
             guididx = catView2.Add(row3);
             catView2.SetAt(guididx, row3);
-            d->pcategorizedArticles(catrow) = catView2;
-            d->catView.SetAt(catidx2, catrow);
+            d->pcategorizedArticles(catrow2) = catView2;
+            d->catView.SetAt(catidx2, catrow2);
         }
 
         d->modified = true;
Comment 6 Jim Dabell 2005-10-19 16:14:18 UTC
That's fixed it.  Thanks!