martinrotter / rssguard

Feed reader (and podcast player) which supports RSS/ATOM/JSON and many web-based feed services.
GNU General Public License v3.0
1.52k stars 123 forks source link

[BUG]: RSS Guard Lite crash on attached images #1449

Open Neo-CTC opened 2 months ago

Neo-CTC commented 2 months ago

Brief description of the issue

When rapidly switching between articles with images RSS Guard Lite will crash if not given enough time to load the images in between. Standard RSS Guard does not seem to be affected.

How to reproduce the bug?

  1. Enable Display attachments directly in article in the settings
  2. Load a feed with images, e.g. https://www.astronomy.com/feed/?post_type=potd/
  3. Rapidly switch between articles either by clicking or keyboard keys

What was the expected result?

Pretty pictures of space

What actually happened?

Program dies

Debug log

time="     0.105" type="debug" -> core: Initializing settings in '/tmp/rsstest/config/config.ini' (custom way).
time="     0.105" type="debug" -> core: Starting to load active localization. Desired localization is 'en_US'.
time="     0.105" type="debug" -> core: Application localization 'en_US' loaded successfully, specifically sublocalization 'en_US' was loaded.
time="     0.105" type="warning" -> core: Qt localization 'en_US' WAS NOT loaded successfully.
time="     0.115" type="debug" -> database: File-based SQLite database connection 'DatabaseFactory' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.115" type="debug" -> database: File-based SQLite database has version '8'.
time="     0.115" type="debug" -> gui: Available icon theme paths: QList(/home/neo/.local/share/icons, /usr/share/icons, :/icons, :/graphics, /tmp/rsstest/icons, /usr/bin/icons)
time="     0.116" type="debug" -> gui: Installed icon themes are: '', 'hicolor', 'breeze', 'breeze-dark', 'Adwaita', 'AdwaitaLegacy', 'elementary', 'default', 'Qogir', 'Qogir-dark', 'HighContrast'
time="     0.116" type="debug" -> gui: Loading default system icon theme.
time="     0.116" type="debug" -> gui: Found path of base skin: ':/skins/nudus-base'.
time="     0.116" type="debug" -> gui: Base file ':/skins/nudus-base/html_wrapper.html' exists, using it for the skin.
time="     0.116" type="debug" -> gui: Local file ':/skins/nudus-light/lite_html_style.css' exists, using it for the skin.
time="     0.116" type="debug" -> gui: Base file ':/skins/nudus-base/lite_html_enclosure_image.html' exists, using it for the skin.
time="     0.116" type="debug" -> gui: Base file ':/skins/nudus-base/lite_html_single_message.html' exists, using it for the skin.
time="     0.116" type="debug" -> gui: Base file ':/skins/nudus-base/lite_html_enclosure_every.html' exists, using it for the skin.
time="     0.116" type="debug" -> gui: Local file ':/skins/nudus-light/qt_style.qss' exists, using it for the skin.
time="     0.116" type="debug" -> gui: Base file ':/skins/nudus-base/html_adblocked.html' exists, using it for the skin.
time="     0.116" type="debug" -> gui: OS defines color scheme: 'Qt::ColorScheme::Light'.
time="     0.117" type="debug" -> gui: Setting style: ''.
time="     0.117" type="debug" -> gui: Skin 'nudus-light' loaded. Lite: 'true'.
time="     0.117" type="debug" -> network: Disabling application-wide proxy completely.
time="     0.117" type="debug" -> core: SQLite version: '3.46.0'.
time="     0.121" type="debug" -> core: OpenSSL version: 'OpenSSL 3.3.1 4 Jun 2024'.
time="     0.121" type="debug" -> core: OpenSSL supported: 'true'.
time="     0.121" type="debug" -> core: Global thread pool has 12 threads.
time="     0.121" type="debug" -> core: Setting locale for LC_NUMERIC to C as libmpv requires it.
time="     0.121" type="debug" -> core: Instantiated class  'Application'.
time="     0.122" type="debug" -> database: SQLite database connection 'MessagesModel' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.124" type="debug" -> message-model: Repopulated model, SQL statement is now:
 'SELECT Messages.id, Messages.is_read, Messages.is_important, Messages.is_deleted, Messages.is_pdeleted, Messages.feed, Messages.title, Messages.url, Messages.author, Messages.date_created, Messages.contents, Messages.enclosures, Messages.score, Messages.account_id, Messages.custom_id, Messages.custom_hash, Feeds.title, Feeds.is_rtl, CASE WHEN LENGTH(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures, (SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Messages.labels LIKE "%." || Labels.custom_id || ".%") as msg_labels, Messages.labels FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = Feeds.account_id WHERE 0 > 1;'.
time="     0.124" type="debug" -> core: Auto-download timer started with interval 10000 ms.
time="     0.124" type="debug" -> core: Creating FeedDownloader singleton.
time="     0.124" type="debug" -> gui: Creating main application form in thread: '0x71ee7de68e40'.
time="     0.134" type="debug" -> gui: Current row changed - proxy 'QModelIndex(-1,-1,0x0,QObject(0x0))', source 'QModelIndex(-1,-1,0x0,QObject(0x0))'.
time="     0.135" type="debug" -> gui: Article list header geometries changed.
time="     0.139" type="debug" -> network: Settings of BaseNetworkAccessManager loaded.
time="     0.140" type="debug" -> network: Settings of BaseNetworkAccessManager loaded.
time="     0.140" type="debug" -> network: Settings of BaseNetworkAccessManager loaded.
time="     0.150" type="debug" -> gui: Article list header geometries changed.
time="     0.152" type="debug" -> gui: Article list header geometries changed.
time="     0.155" type="debug" -> gui: Article list header geometries changed.
time="     0.157" type="debug" -> gui: Article list header geometries changed.
time="     0.161" type="debug" -> gui: Creating tray icon menu.
time="     0.178" type="debug" -> CTRL is NOT pressed while sorting articles - sorting with standard mode.
time="     0.180" type="debug" -> message-model: Repopulated model, SQL statement is now:
 'SELECT Messages.id, Messages.is_read, Messages.is_important, Messages.is_deleted, Messages.is_pdeleted, Messages.feed, Messages.title, Messages.url, Messages.author, Messages.date_created, Messages.contents, Messages.enclosures, Messages.score, Messages.account_id, Messages.custom_id, Messages.custom_hash, Feeds.title, Feeds.is_rtl, CASE WHEN LENGTH(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures, (SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Messages.labels LIKE "%." || Labels.custom_id || ".%") as msg_labels, Messages.labels FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = Feeds.account_id WHERE 0 > 1 ORDER BY Messages.date_created DESC;'.
time="     0.187" type="debug" -> core: Showing the main window when the application is starting.
time="     0.189" type="debug" -> gui: Article list header geometries changed.
time="     0.189" type="debug" -> gui: Article list header geometries changed.
time="     0.191" type="debug" -> gui: Article list header geometries changed.
time="     0.195" type="debug" -> database: SQLite database connection 'FeedReader' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.196" type="debug" -> core: Checking for plugins in '/usr/bin/../lib/rssguard'.
time="     0.199" type="debug" -> core: Plugin '/usr/lib/rssguard/librssguard-feedly.so' loaded.
time="     0.202" type="debug" -> core: Plugin '/usr/lib/rssguard/librssguard-gmail.so' loaded.
time="     0.206" type="debug" -> core: Plugin '/usr/lib/rssguard/librssguard-greader.so' loaded.
time="     0.208" type="debug" -> core: Plugin '/usr/lib/rssguard/librssguard-nextcloud.so' loaded.
time="     0.212" type="debug" -> core: Plugin '/usr/lib/rssguard/librssguard-standard.so' loaded.
time="     0.214" type="debug" -> core: Plugin '/usr/lib/rssguard/librssguard-ttrss.so' loaded.
time="     0.215" type="debug" -> database: SQLite database connection 'FeedlyEntryPoint' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.215" type="debug" -> database: SQLite database connection 'GmailEntryPoint' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.215" type="debug" -> database: SQLite database connection 'GreaderEntryPoint' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.215" type="debug" -> database: SQLite database connection 'NextcloudServiceEntryPoint' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.215" type="debug" -> database: SQLite database connection 'StandardServiceEntryPoint' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.215" type="debug" -> core: Destructing 'std-rss' plugin.
time="     0.216" type="debug" -> database: SQLite database connection 'StandardServiceRoot' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.216" type="debug" -> core: Custom ID of feed when loading from DB is '1'.
time="     0.216" type="debug" -> database: SQLite database connection 'RecycleBin' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.216" type="debug" -> database: SQLite database connection 'ImportantNode' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.216" type="debug" -> database: SQLite database connection 'UnreadNode' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.217" type="debug" -> database: SQLite database connection 'LabelsNode' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.217" type="debug" -> database: SQLite connection 'StandardServiceRoot' is already active.
time="     0.217" type="debug" -> database: SQLite database connection 'StandardServiceRoot' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.217" type="debug" -> database: SQLite database connection 'TtRssServiceEntryPoint' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     0.217" type="debug" -> gui: User wants to have tray icon.
time="     0.217" type="warning" -> gui: Showing tray icon with little delay.
time="     0.217" type="debug" -> gui: Feed list item expanded - RSS/ATOM/JSON
time="     0.217" type="debug" -> core: No execution message received from other app instances.
time="     0.235" type="debug" -> core: OS asked application to save its state.
time="     2.164" type="debug" -> CTRL is NOT pressed while sorting articles - sorting with standard mode.
time="     2.164" type="debug" -> core: Displaying messages from feeds IDs: ''1'' and URLs: 'https://www.astronomy.com/feed/?post_type=potd%2F'.
time="     2.165" type="debug" -> message-model: Repopulated model, SQL statement is now:
 'SELECT Messages.id, Messages.is_read, Messages.is_important, Messages.is_deleted, Messages.is_pdeleted, Messages.feed, Messages.title, Messages.url, Messages.author, Messages.date_created, Messages.contents, Messages.enclosures, Messages.score, Messages.account_id, Messages.custom_id, Messages.custom_hash, Feeds.title, Feeds.is_rtl, CASE WHEN LENGTH(Messages.enclosures) > 10 THEN 'true' ELSE 'false' END AS has_enclosures, (SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Messages.labels LIKE "%." || Labels.custom_id || ".%") as msg_labels, Messages.labels FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = Feeds.account_id WHERE Feeds.custom_id IN ('1') AND Messages.is_deleted = 0 AND Messages.is_pdeleted = 0 AND Messages.account_id = 1 ORDER BY Messages.date_created DESC;'.
time="     3.151" type="debug" -> gui: Message list got focus with reason 'Qt::MouseFocusReason'.
time="     3.152" type="debug" -> gui: Current row changed - proxy 'QModelIndex(0,2,0x6378008d7860,MessagesProxyModel(0x637800620420, name = MessagesProxyModel))', source 'QModelIndex(0,2,0x0,MessagesModel(0x71ee700048f0))'.
time="     3.154" type="debug" -> gui: HTML image resizing took 0 miliseconds.
time="     3.157" type="debug" -> database: SQLite connection 'ImportantNode' is already active.
time="     3.157" type="debug" -> database: SQLite database connection 'ImportantNode' to file '/tmp/rsstest/database/database.db' seems to be established.
time="     3.158" type="debug" -> feed-model: There is request to reload feed model, reloading the 1 items individually.
time="     3.176" type="warning" -> gui: Tray icon is available, showing now.
time="     3.179" type="debug" -> gui: Creating SystemTrayIcon instance.
time="     3.181" type="debug" -> gui: Showing tray icon immediately.
time="     3.181" type="debug" -> gui: Tray icon displayed.
time="     3.411" type="warning" -> gui: Picture 'QUrl(https://www.astronomy.com/uploads/2024/06/full-moon-july-2016.jpg)' with width '2047' is too wide, down-scaling to prevent horizontal scrollbars. Scaling took 3 miliseconds.
time="     3.953" type="debug" -> gui: Current row changed - proxy 'QModelIndex(1,2,0x6378008d7860,MessagesProxyModel(0x637800620420, name = MessagesProxyModel))', source 'QModelIndex(1,2,0x0,MessagesModel(0x71ee700048f0))'.
time="     3.953" type="debug" -> gui: HTML image resizing took 0 miliseconds.
time="     4.019" type="warning" -> gui: Picture 'QUrl(https://www.astronomy.com/uploads/2011/06/Earth-and-a-blackhole.jpg)' with width '1280' is too wide, down-scaling to prevent horizontal scrollbars. Scaling took 2 miliseconds.
time="     4.020" type="info" -> libpng warning: known incorrect sRGB profile
time="     4.020" type="info" -> libpng warning: profile matches sRGB but writing iCCP instead
time="     4.047" type="info" -> libpng warning: iCCP: known incorrect sRGB profile
time="     4.056" type="info" -> libpng warning: iCCP: known incorrect sRGB profile
time="     4.066" type="info" -> libpng warning: iCCP: known incorrect sRGB profile
time="     4.075" type="info" -> libpng warning: iCCP: known incorrect sRGB profile
time="     4.083" type="info" -> libpng warning: iCCP: known incorrect sRGB profile
time="     4.091" type="info" -> libpng warning: iCCP: known incorrect sRGB profile
time="     4.100" type="info" -> libpng warning: iCCP: known incorrect sRGB profile
time="     4.450" type="debug" -> gui: Current row changed - proxy 'QModelIndex(2,2,0x6378008d7860,MessagesProxyModel(0x637800620420, name = MessagesProxyModel))', source 'QModelIndex(2,2,0x0,MessagesModel(0x71ee700048f0))'.
time="     4.451" type="debug" -> gui: HTML image resizing took 0 miliseconds.
time="     4.500" type="debug" -> gui: Current row changed - proxy 'QModelIndex(3,2,0x6378008d7860,MessagesProxyModel(0x637800620420, name = MessagesProxyModel))', source 'QModelIndex(3,2,0x0,MessagesModel(0x71ee700048f0))'.
time="     4.501" type="debug" -> gui: HTML image resizing took 0 miliseconds.
time="     4.550" type="debug" -> gui: Current row changed - proxy 'QModelIndex(4,2,0x6378008d7860,MessagesProxyModel(0x637800620420, name = MessagesProxyModel))', source 'QModelIndex(4,2,0x0,MessagesModel(0x71ee700048f0))'.
time="     4.551" type="debug" -> gui: HTML image resizing took 0 miliseconds.
time="     4.601" type="debug" -> gui: Current row changed - proxy 'QModelIndex(5,2,0x6378008d7860,MessagesProxyModel(0x637800620420, name = MessagesProxyModel))', source 'QModelIndex(5,2,0x0,MessagesModel(0x71ee700048f0))'.
time="     4.601" type="debug" -> gui: HTML image resizing took 0 miliseconds.
time="     4.650" type="debug" -> gui: Current row changed - proxy 'QModelIndex(6,2,0x6378008d7860,MessagesProxyModel(0x637800620420, name = MessagesProxyModel))', source 'QModelIndex(6,2,0x0,MessagesModel(0x71ee700048f0))'.
time="     4.651" type="debug" -> gui: HTML image resizing took 0 miliseconds.
time="     4.701" type="debug" -> gui: Current row changed - proxy 'QModelIndex(7,2,0x6378008d7860,MessagesProxyModel(0x637800620420, name = MessagesProxyModel))', source 'QModelIndex(7,2,0x0,MessagesModel(0x71ee700048f0))'.
time="     4.701" type="debug" -> gui: HTML image resizing took 0 miliseconds.
time="     4.751" type="debug" -> gui: Current row changed - proxy 'QModelIndex(8,2,0x6378008d7860,MessagesProxyModel(0x637800620420, name = MessagesProxyModel))', source 'QModelIndex(8,2,0x0,MessagesModel(0x71ee700048f0))'.
time="     4.751" type="debug" -> gui: HTML image resizing took 0 miliseconds.
time="     4.801" type="debug" -> gui: Current row changed - proxy 'QModelIndex(9,2,0x6378008d7860,MessagesProxyModel(0x637800620420, name = MessagesProxyModel))', source 'QModelIndex(9,2,0x0,MessagesModel(0x71ee700048f0))'.
time="     4.801" type="debug" -> gui: HTML image resizing took 0 miliseconds.

See also attached log file from the systemd journal journal.log

Operating system and version

RSS Guard

Version: 4.7.2 (built on Linux/x86_64)
Revision: 5b0453b86-lite
Build date: 5/31/24 11:29 AM
OS: EndeavourOS
Qt: 6.7.2 (compiled against 6.7.1)
martinrotter commented 1 month ago

I was not able to reproduce this problem on Windows. Will try on Linux soon.

TroudhuK commented 4 weeks ago

Easily reproduced on Windows (I have the same crash).

image

m_activeReply is null when calling ->deleteLater() in downloader.cpp l.247