Bug report #8244
Plugin manager crashes when adding a repository
|Affected QGIS version:||master||Regression?:||No|
|Operating System:||Easy fix?:||No|
|Pull Request or Patch supplied:||No||Resolution:|
|Crashes QGIS or corrupts data:||Yes||Copied to github as #:||17055|
I have created an unofficial plugin repository, which was working under 1.8. When I try to add it in master (e689364) using the plugin manager, QGIS crashes. Thereafter, every time I try to open the plugin manager, QGIS crashes again. I have tried reverting to a previously-known-working version of the XML (tested on 1.8), but still the repo causes a crash.
Repository URL: http://gator869.hostgator.com/~rudivs/plugins/plugins.xml
- section of ~/.config/QGIS2.conf:*
plugin-seen=sextante, tmsforkorea, db_manager, pointsamplingtool, quickfinder, imagemap_plugin, postgres91plusauditor, loopvisiblelayers, valuetool, simplesvg, plaingeometryeditor, openlayers_plugin, DistroMap, qgsexpressionsplus, pinpoint, rasterinterpolation, points2one, photo2shape, NewMemoryLayer, DataDrivenInputMask, lizmap, GdalTools, profiletool, zoomtocoordinates, DockableMirrorMap, layers_by_field, tablemanager, fTools, mapserver_export, VectorFieldRenderer, mmqgis, shapefile_encoding_fixer, pluginbuilder, tileindex, itembrowser, SANBI_Gazetteer, linkit, MemoryLayerSaver, scriptrunner
<pyqgis_plugin name="Gazetteer" version="0.3.1">
<description>Gazetteer Search plugin</description>
<author_name>Rudi von Staden</author_name>
#2 Updated by Rudi von Staden over 7 years ago
It seems that I can't add any repositories at the moment. I've tried adding the Sourcepole repo and Carson Farmer's repo (linked at https://issues.qgis.org/projects/quantum-gis/wiki/Python_Plugin_Repositories), and both crash. Could it be a build issue somewhere?
Here are the message outputs when running from command line:
Warning: loading of qt translation failed [/usr/share/qt4/translations/qt_en_ZA]
Warning: void DBusMenuExporterPrivate::addAction(QAction*, int): Already tracking action "&SEXTANTE toolbox" under id 261
Fatal: QGIS died on signal 11
Stacktrace (piped through c++filt):
/home/rudi/apps/qgis/bin/qgis(myMessageOutput(QtMsgType, char const*)+0x250)[0x816a810]
/usr/lib/i386-linux-gnu/libQtCore.so.4(qt_message_output(QtMsgType, char const*)+0x39)[0xb47b8629]
/usr/lib/i386-linux-gnu/libQtCore.so.4(qFatal(char const*, ...)+0x18)[0xb47b8c58]
Aborted (core dumped)
#4 Updated by Matthias Kuhn over 7 years ago
- Priority changed from Normal to Severe/Regression
Confirmed here too after pulling
build/output/python/pyplugin_installer/installer.py, line 125, in fetchAvailablePlugins (self=<QgsPluginInstaller(statusLabel=None) at remote 0x3edd710>, reloadMode=True, key=u'QGIS Official Repository')\ " >~" repositories.killConnection(key)\ " >~"#12 (frame information optimized out)\ " >~"#15 (frame information optimized out)\ "
#6 Updated by Borys Jurgiel over 7 years ago
It was a side-effect of the recent change in closing pending requests. Now it's fixed, however, your repository still returns the "406: Not Acceptable" status. Clearly your http server doesn't accept standard QNetworkRequest (with quite minimalistic headers I guess), while it works ok with web browsers. So I tried to set the headers exactly like my Chromium does (even if they doesn't seem to make much sense), without success:
setRawHeader( "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" )
setRawHeader( "Accept-Encoding", "gzip,deflate,sdch" )
setRawHeader( "Accept-Language", "pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4" )
Maybe you can configure your server to work without the "Accept" headers?
#7 Updated by Rudi von Staden over 7 years ago
Thanks Borys, I'm compiling the updated code so I'm sure that'll fix the crash problem. It seems that the 406 error is related to Apache's mod_security module. It can be disabled in .htaccess using the directive below. But it was working in 1.8, so I wonder what was handled differently there, and whether the issue will affect others? The headers with 1.8 are pretty minimal too (well they seem that way checking with Wireshark):
@GET /~rudivs/plugins/plugins.xml HTTP/1.1\
Some people seem to have got it to work with
setRawHeader( "User-Agent" , "Mozilla Firefox" ), but I don't know whether that would work here, or whether it would be a desirable solution.
For the benefit of anyone else with this issue, you can turn off mod_security by placing this in your .htaccess file:
I haven't disabled it yet in case you want to test any other settings for user agent.
#8 Updated by Borys Jurgiel over 7 years ago
Hi, we switched from simple QHttp requests to QgsNetworkAccessManager (mainly in order to properly support proxies) and it caused the difference. I'd avoid setting false User-Agent, I guess we'll rather set it to "QGIS-Something" some day to possibly collect statistics or so.
I don't have enough time to play with the headers right now, so feel free to disable mod_security in your repo. Other repositories works fine, so I guess we can leave it like is for now. However, thank you very much for the fruitful investigation. Now I know I need to enable mod_security in my test repo if further tests will occur necessary.