Fixes possible crash in the RSS Downloader dialog (when having RSS folders)

This commit is contained in:
Christophe Dumez
2010-12-18 18:54:27 +00:00
parent 148ec32825
commit b92c152d30
3 changed files with 15 additions and 2 deletions

View File

@@ -7,6 +7,7 @@
- BUGFIX: Fix some 'File Not found' warning in the Web UI - BUGFIX: Fix some 'File Not found' warning in the Web UI
- BUGFIX: Fix dangerous usage of vector iterator - BUGFIX: Fix dangerous usage of vector iterator
- BUGFIX: No longer expand the first folder in the torrent content list - BUGFIX: No longer expand the first folder in the torrent content list
- BUGFIX: Fixes possible crash in the RSS Downloader dialog (closes #691426)
* Sun Dec 5 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.5.1 * Sun Dec 5 2010 - Christophe Dumez <chris@qbittorrent.org> - v2.5.1
- BUGFIX: Fix possible crash when right-clicking on a torrent - BUGFIX: Fix possible crash when right-clicking on a torrent

View File

@@ -126,10 +126,16 @@ void AutomatedRssDownloader::loadFeedList()
const RssSettings settings; const RssSettings settings;
const QStringList feed_aliases = settings.getRssFeedsAliases(); const QStringList feed_aliases = settings.getRssFeedsAliases();
const QStringList feed_urls = settings.getRssFeedsUrls(); const QStringList feed_urls = settings.getRssFeedsUrls();
QStringList existing_urls;
for(int i=0; i<feed_aliases.size(); ++i) { for(int i=0; i<feed_aliases.size(); ++i) {
QString feed_url = feed_urls.at(i);
feed_url = feed_url.split("\\").last();
qDebug() << Q_FUNC_INFO << feed_url;
if(existing_urls.contains(feed_url)) continue;
QListWidgetItem *item = new QListWidgetItem(feed_aliases.at(i), ui->listFeeds); QListWidgetItem *item = new QListWidgetItem(feed_aliases.at(i), ui->listFeeds);
item->setData(Qt::UserRole, feed_urls.at(i)); item->setData(Qt::UserRole, feed_url);
item->setFlags(item->flags()|Qt::ItemIsUserCheckable); item->setFlags(item->flags()|Qt::ItemIsUserCheckable);
existing_urls << feed_url;
} }
} }
@@ -438,8 +444,12 @@ void AutomatedRssDownloader::updateMatchingArticles()
RssDownloadRule rule = m_ruleList->getRule(rule_item->text()); RssDownloadRule rule = m_ruleList->getRule(rule_item->text());
if(!rule.isValid()) continue; if(!rule.isValid()) continue;
foreach(const QString &feed_url, rule.rssFeeds()) { foreach(const QString &feed_url, rule.rssFeeds()) {
qDebug() << Q_FUNC_INFO << feed_url;
Q_ASSERT(all_feeds.contains(feed_url)); Q_ASSERT(all_feeds.contains(feed_url));
if(!all_feeds.contains(feed_url)) continue;
const RssFeed *feed = all_feeds.value(feed_url); const RssFeed *feed = all_feeds.value(feed_url);
Q_ASSERT(feed);
if(!feed) continue;
const QStringList matching_articles = rule.findMatchingArticles(feed); const QStringList matching_articles = rule.findMatchingArticles(feed);
if(!matching_articles.isEmpty()) if(!matching_articles.isEmpty())
addFeedArticlesToTree(feed, matching_articles); addFeedArticlesToTree(feed, matching_articles);

View File

@@ -268,7 +268,9 @@ QHash<QString, RssFeed*> RssFolder::getAllFeedsAsHash() const {
QHash<QString, RssFeed*> ret; QHash<QString, RssFeed*> ret;
foreach(RssFile *item, this->values()) { foreach(RssFile *item, this->values()) {
if(item->getType() == RssFile::FEED) { if(item->getType() == RssFile::FEED) {
RssFeed* feed = static_cast<RssFeed*>(item); RssFeed* feed = dynamic_cast<RssFeed*>(item);
Q_ASSERT(feed);
qDebug() << Q_FUNC_INFO << feed->getUrl();
ret[feed->getUrl()] = feed; ret[feed->getUrl()] = feed;
} else { } else {
ret.unite(static_cast<RssFolder*>(item)->getAllFeedsAsHash()); ret.unite(static_cast<RssFolder*>(item)->getAllFeedsAsHash());