Package: liferea
Version: 1.15.8-2+b1
Control: found -1 1.12.2-1
Control: fixed -1 1.16~rc3-1
Tags: fixed-upstream
Severity: important
Usertags: crash
User: debian-devel@lists.debian.org
Userags: privacy
When the Tools -> Plugins menu item is selected, it loads the plugin
list from a JSON file hosted on GitHub[1]. This is both a privacy
issue[2] and now it is also broken because the file got removed
in upstream commit a92d3b0e2b5a4a4068308cbb3240b88073d09c49[3],
that causes a crash in plugin-installer.py due to the 404 error.
1. https://raw.githubusercontent.com/lwindolf/liferea/master/plugins/plugin-list.json
2. https://wiki.debian.org/PrivacyIssues
3. https://github.com/lwindolf/liferea/commit/a92d3b0e2b5a4a4068308cbb3240b88073d09c49
This issue is fixed in upstream liferea 1.16-RC3 that merged the commit
above, but has been present since 1.12.2-1, which means that both
Debian stable and oldstable liferea need to be fixed too.
Since the freeze is close, I suggest installing the file from the
source package in plugins/plugin-list.json into /usr/share/liferea/
and then patching the plugin-installer.py to use a file:// URL instead.
I have tested this fix by editing the files locally, all of the
functionality of the Plugins dialog works, including downloading
and installing not yet installed plugins.
In addition, the plugin installation just downloads the plugins with
git clone, which seems a bit insecure, but this is dropped in 1.16-RC3,
and it is at least protected by TLS. It might be worth packaging some
of the popular liferea plugin packages from the list for Debian.
This is the crash seen on the console when opening the menu item:
Traceback (most recent call last):
File "/usr/lib/x86_64-linux-gnu/liferea/plugins/plugin-installer.py", line 63, in _run
self._browser = PluginBrowser()
~~~~~~~~~~~~~^^
File "/usr/lib/x86_64-linux-gnu/liferea/plugins/plugin-installer.py", line 92, in __init__
self._plugin_list = self.fetch_list()
~~~~~~~~~~~~~~~^^
File "/usr/lib/x86_64-linux-gnu/liferea/plugins/plugin-installer.py", line 168, in fetch_list
resp = urllib.request.urlopen(req).read()
~~~~~~~~~~~~~~~~~~~~~~^^^^^
File "/usr/lib/python3.13/urllib/request.py", line 189, in urlopen
return opener.open(url, data, timeout)
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/urllib/request.py", line 495, in open
response = meth(req, response)
File "/usr/lib/python3.13/urllib/request.py", line 604, in http_response
response = self.parent.error(
'http', request, response, code, msg, hdrs)
File "/usr/lib/python3.13/urllib/request.py", line 533, in error
return self._call_chain(*args)
~~~~~~~~~~~~~~~~^^^^^^^
File "/usr/lib/python3.13/urllib/request.py", line 466, in _call_chain
result = func(*args)
File "/usr/lib/python3.13/urllib/request.py", line 613, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found