https://bugs.kde.org/show_bug.cgi?id=393496
Bug ID: 393496 Summary: assert in KProtocolInfoFactory::findProtocol() crashes Konqueror with invalid URLs Product: konqueror Version: Git Platform: Other OS: Linux Status: UNCONFIRMED Severity: normal Priority: NOR Component: general Assignee: konq-b...@kde.org Reporter: j...@keelhaul.me.uk Target Milestone: --- https://phabricator.kde.org/D11013 introduced an assert in that function to detect invalid parameters passed to it. This is reasonable, but the assert is hit if Konqueror is asked to show an invalid URL (on the command line or typed in the address bar) in at least two cases: 1. An obviously invalid URL (debug output trimmed): $ konqueror --part khtml 'help me' konqueror(5939) handleCommandLine: args= ("help me") konqueror(5939) KShortUriFilter::filterUri: "help me" konqueror(5939) KUriSearchFilter::filterUri: "help me" : QUrl("") , type = 8 konqueror(5939) KAutoWebSearch::filterUri: "help me" konqueror(5939) KonqMainWindow::openUrl: url= QUrl("error:/?error=105&errText=help me#help me") mimeType= "" _req= "[serviceName=khtml]" view= QObject(0x0) konqueror(5939) KProtocolInfoFactory::findProtocol: Refilling KProtocolInfoFactory cache in the hope to find "error" konqueror(5939) KonqMainWindow::openView: "text/html" QUrl("error:/?error=105&errText=help me#help me") childView= QObject(0x0) req: "[serviceName=khtml forceAutoEmbed]" konqueror(5939) KonqFactory::createView: Trying to create view for "text/html" "khtml" konqueror(5939) KonqFactory::createView: Found requested service "khtml" konqueror(5939) KonqFactory::createView: Trying to open lib for requested service "khtml" konqueror(5939) KonqViewManager::doSetActivePart: KHTMLPart(0x5610457394d0) QUrl("") konqueror(5939) KonqMainWindow::slotPartActivated: KHTMLPart(0x5610457394d0) "khtml" konqueror(5939) KonqMainWindow::slotPartActivated: New current view konqueror(5939) KonqView::openUrl: url= QUrl("error:/?error=105&errText=help me#help me") locationBarURL= "error:/?error=105&errText=help me#help me" konqueror(5939) unknown: ASSERT: "!protocol.isEmpty()" in file /ws/frameworks/tier3/kio/src/core/kprotocolinfofactory.cpp, line 74 KCrash: crashing... crashRecursionCounter = 2 KCrash: Application Name = konqueror path = /usr/kde5/bin pid = 5939 KCrash: Arguments: /usr/kde5/bin/konqueror --part khtml help me KCrash: Attempting to start /usr/kde5/lib64/libexec/drkonqi from kdeinit [KCrash Handler] #5 0x00007fce2cecd248 in raise () from /lib64/libc.so.6 #6 0x00007fce2cecef99 in abort () from /lib64/libc.so.6 #7 0x00007fce2e58e787 in QMessageLogger::fatal(char const*, ...) const () from /usr/lib64/libQt5Core.so.5 #8 0x00007fce2e5895d6 in qt_assert(char const*, char const*, int) () from /usr/lib64/libQt5Core.so.5 #9 0x00007fce3468847b in KProtocolInfoFactory::findProtocol (this=0x7fce349143c0 <(anonymous namespace)::Q_QGS_kProtocolInfoFactoryInstance::innerFunction()::holder>, protocol=...) at /ws/frameworks/tier3/kio/src/core/kprotocolinfofactory.cpp:74 #10 0x00007fce34683c09 in KProtocolInfo::protocolClass (_protocol=...) at /ws/frameworks/tier3/kio/src/core/kprotocolinfo.cpp:338 #11 0x00007fce34629ae8 in KIO::rawErrorDetail (errorCode=errorCode@entry=105, errorText=..., reqUrl=reqUrl@entry=0x56104568ce00) at /ws/frameworks/tier3/kio/src/core/job_error.cpp:331 #12 0x00007fce0e259ecc in KHTMLPart::htmlError (this=this@entry=0x5610457394d0, errorCode=errorCode@entry=105, text=..., reqUrl=...) at /ws/frameworks/tier3/khtml/src/khtml_part.cpp:1891 #13 0x00007fce0e25b1df in KHTMLPart::openUrl (this=0x5610457394d0, url=...) at /ws/frameworks/tier3/khtml/src/khtml_part.cpp:753 #14 0x00007fce35f4b795 in KonqView::openUrl (this=this@entry=0x5610456ce6c0, url=..., locationBarURL=..., nameFilter=..., tempFile=<optimized out>) at /ws/frameworks/applications/konqueror/src/konqview.cpp:227 #15 0x00007fce35f939c0 in KonqMainWindow::openView (this=this@entry=0x5610455d86d0, mimeType=..., _url=..., childView=0x5610456ce6c0, childView@entry=0x0, req=...) at /ws/frameworks/applications/konqueror/src/konqmainwindow.cpp:998 #16 0x00007fce35f94bdd in KonqMainWindow::openUrl (this=this@entry=0x5610455d86d0, _view=_view@entry=0x0, _url=..., _mimeType=..., _req=..., trustedSource=trustedSource@entry=false) at /ws/frameworks/applications/konqueror/src/konqmainwindow.cpp:716 #17 0x00007fce35fa8488 in KonqMainWindowFactory::createNewWindow (url=..., req=...) at /ws/frameworks/applications/konqueror/src/konqmainwindowfactory.cpp:78 #18 0x00007fce35fc754f in handleCommandLine (parser=..., workingDirectory=..., ret=ret@entry=0x7ffe7e7cb8e8) at /ws/frameworks/applications/konqueror/src/konqmain.cpp:143 #19 0x00007fce35fcba9d in kdemain (argc=<optimized out>, argv=<optimized out>) at /ws/frameworks/applications/konqueror/src/konqmain.cpp:270 #20 0x00007fce2ceb8571 in __libc_start_main () from /lib64/libc.so.6 #21 0x0000561044bfdbda in _start () 2. An unknown protocol (this time happening in a plugin, but only with the WebKit part): $ konqueror --part webkitpart 'zzzz:/' konqueror(5999) handleCommandLine: args= ("zzzz:/") konqueror(5999) KShortUriFilter::filterUri: "zzzz:/" konqueror(5999) KShortUriFilter::filterUri: url= QUrl("zzzz:/") cmd= "zzzz:/" isMalformed= false konqueror(5999) KShortUriFilter::filterUri: path = "" isLocalFullPath= false exists= false url= QUrl("zzzz:/") konqueror(5999) KShortUriFilter::filterUri: testing regexp for "ftp://" konqueror(5999) KShortUriFilter::filterUri: testing regexp for "mailto:" konqueror(5999) KUriSearchFilter::filterUri: "zzzz:/" : QUrl("zzzz:/") , type = 8 konqueror(5999) KProtocolInfoFactory::findProtocol: Refilling KProtocolInfoFactory cache in the hope to find "zzzz" konqueror(5999) KProtocolInfoFactory::findProtocol: Refilling KProtocolInfoFactory cache in the hope to find "zzzz" konqueror(5999) KAutoWebSearch::filterUri: "zzzz:/" konqueror(5999) KonqMainWindow::openUrl: url= QUrl("error:/?error=105&errText=zzzz%3A%2F#zzzz:/") mimeType= "" _req= "[serviceName=webkitpart]" view= QObject(0x0) konqueror(5999) KonqMainWindow::openView: "text/html" QUrl("error:/?error=105&errText=zzzz%3A%2F#zzzz:/") childView= QObject(0x0) req: "[serviceName=webkitpart forceAutoEmbed]" konqueror(5999) KonqFactory::createView: Trying to create view for "text/html" "webkitpart" konqueror(5999) KonqFactory::createView: "kwebkitpart" : X-KDE-BrowserView-AllowAsDefault is valid : false konqueror(5999) KWebKitFactory::create: KonqFrame(0x560784b34d40) QObject(0x0) konqueror(5999) KonqViewManager::doSetActivePart: KWebKitPart(0x560784ba5b30) QUrl("") konqueror(5999) KonqMainWindow::slotPartActivated: KWebKitPart(0x560784ba5b30) "kwebkitpart" konqueror(5999) KonqMainWindow::slotPartActivated: New current view KonqView(0x560784c0ed60) konqueror(5999) KonqView::openUrl: url= QUrl("error:/?error=105&errText=zzzz%3A%2F#zzzz:/") locationBarURL= "error:/?error=105&errText=zzzz%3A%2F#zzzz:/" konqueror(5999) KWebKitPart::openUrl: QUrl("error:/?error=105&errText=zzzz%3A%2F#zzzz:/") konqueror(5999) unknown: ASSERT: "!protocol.isEmpty()" in file /ws/frameworks/tier3/kio/src/core/kprotocolinfofactory.cpp, line 74 KCrash: crashing... crashRecursionCounter = 2 KCrash: Application Name = konqueror path = /usr/kde5/bin pid = 5999 KCrash: Arguments: /usr/kde5/bin/konqueror --part webkitpart zzzz:/ KCrash: Attempting to start /usr/kde5/lib64/libexec/drkonqi from kdeinit [KCrash Handler] #6 0x00007f2c98ce6248 in raise () from /lib64/libc.so.6 #7 0x00007f2c98ce7f99 in abort () from /lib64/libc.so.6 #8 0x00007f2c9a3a7787 in QMessageLogger::fatal(char const*, ...) const () from /usr/lib64/libQt5Core.so.5 #9 0x00007f2c9a3a25d6 in qt_assert(char const*, char const*, int) () from /usr/lib64/libQt5Core.so.5 #10 0x00007f2ca04a147b in KProtocolInfoFactory::findProtocol (this=0x7f2ca072d3c0 <(anonymous namespace)::Q_QGS_kProtocolInfoFactoryInstance::innerFunction()::holder>, protocol=...) at /ws/frameworks/tier3/kio/src/core/kprotocolinfofactory.cpp:74 #11 0x00007f2ca049cc09 in KProtocolInfo::protocolClass (_protocol=...) at /ws/frameworks/tier3/kio/src/core/kprotocolinfo.cpp:338 #12 0x00007f2c333e3481 in Akregator::KonqFeedIcon::feedFound (this=0x560784b1b8b0) at /ws/frameworks/applications/konqueror/plugins/akregator/konqfeedicon.cpp:106 #13 0x00007f2c333e4500 in Akregator::KonqFeedIcon::addFeedIcon (this=0x560784b1b8b0) at /ws/frameworks/applications/konqueror/plugins/akregator/konqfeedicon.cpp:160 #14 0x00007f2c9a590c29 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib64/libQt5Core.so.5 #15 0x00007f2ca0d93302 in KParts::ReadOnlyPart::completed (this=this@entry=0x560784ba5b30, _t1=<optimized out>) at /ws/BUILD.keelhaul/tier3-kparts--frameworks-BUILD/src/KF5Parts_autogen/include/moc_readonlypart.cpp:248 #16 0x00007f2c7a89feef in KWebKitPart::slotLoadFinished (this=0x560784ba5b30, ok=<optimized out>) at /ws/frameworks/extragear/kwebkitpart/src/kwebkitpart.cpp:559 #17 0x00007f2c9a590c29 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib64/libQt5Core.so.5 #18 0x00007f2c7a638e32 in QWebView::loadFinished(bool) () from /usr/kde5/lib/libQt5WebKitWidgets.so.5 #19 0x00007f2c7a63a08c in QWebView::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () from /usr/kde5/lib/libQt5WebKitWidgets.so.5 #20 0x00007f2c9a590c29 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib64/libQt5Core.so.5 #21 0x00007f2c7a62e072 in QWebPage::loadFinished(bool) () from /usr/kde5/lib/libQt5WebKitWidgets.so.5 #22 0x00007f2c7a62b8f1 in QWebFramePrivate::emitLoadFinished(bool, bool) () from /usr/kde5/lib/libQt5WebKitWidgets.so.5 #23 0x00007f2c77de1be7 in WebCore::FrameLoaderClientQt::dispatchDidFinishLoad() () from /usr/kde5/lib/libQt5WebKit.so.5 #24 0x00007f2c78e039c9 in WebCore::FrameLoader::checkLoadCompleteForThisFrame() () from /usr/kde5/lib/libQt5WebKit.so.5 #25 0x00007f2c78e03b0a in WebCore::FrameLoader::checkLoadComplete() () from /usr/kde5/lib/libQt5WebKit.so.5 #26 0x00007f2c78e03d08 in WebCore::FrameLoader::checkCompleted() [clone .part.323] () from /usr/kde5/lib/libQt5WebKit.so.5 #27 0x00007f2c78e702dd in WebCore::CachedResourceLoader::loadDone(WebCore::CachedResource*, bool) () from /usr/kde5/lib/libQt5WebKit.so.5 #28 0x00007f2c78e463cd in WebCore::SubresourceLoader::didFinishLoading(double) () from /usr/kde5/lib/libQt5WebKit.so.5 #29 0x00007f2c78e3b10a in WebCore::ResourceLoader::loadDataURL()::{lambda(WTF::Optional<WebCore::DataURLDecoder::Result>)#1}::operator()(WTF::Optional<WebCore::DataURLDecoder::Result>) const () from /usr/kde5/lib/libQt5WebKit.so.5 #30 0x00007f2c78e3fdcd in std::_Function_handler<void (WTF::Optional<WebCore::DataURLDecoder::Result>), WebCore::ResourceLoader::loadDataURL()::{lambda(WTF::Optional<WebCore::DataURLDecoder::Result>)#1}>::_M_invoke(std::_Any_data const&, WTF::Optional<WebCore::DataURLDecoder::Result>&&) () from /usr/kde5/lib/libQt5WebKit.so.5 #31 0x00007f2c7902aca3 in std::_Function_handler<void (), WebCore::DataURLDecoder::decode(WebCore::URL const&, WebCore::DataURLDecoder::ScheduleContext const&, std::function<void (WTF::Optional<WebCore::DataURLDecoder::Result>)>)::{lambda()#1}::operator()() const::{lambda()#1}>::_M_invoke(std::_Any_data const&) () from /usr/kde5/lib/libQt5WebKit.so.5 #32 0x00007f2c7870f738 in WTF::dispatchFunctionsFromMainThread() () from /usr/kde5/lib/libQt5WebKit.so.5 #33 0x00007f2c7874f771 in WTF::MainThreadInvoker::event(QEvent*) () from /usr/kde5/lib/libQt5WebKit.so.5 #34 0x00007f2c9b1fe03c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5 #35 0x00007f2c9b205b02 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5 #36 0x00007f2c9a566a09 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5 #37 0x00007f2c9a569ec3 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib64/libQt5Core.so.5 #38 0x00007f2c9a5ba213 in ?? () from /usr/lib64/libQt5Core.so.5 #39 0x00007f2c929881ee in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0 #40 0x00007f2c92988465 in ?? () from /usr/lib64/libglib-2.0.so.0 #41 0x00007f2c9298852c in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0 #42 0x00007f2c9a5b9fbf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/libQt5Core.so.5 #43 0x00007f2c8dade411 in ?? () from /usr/lib64/libQt5XcbQpa.so.5 #44 0x00007f2c9a5655ba in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/libQt5Core.so.5 #45 0x00007f2c9a56e114 in QCoreApplication::exec() () from /usr/lib64/libQt5Core.so.5 #46 0x00007f2ca1de40f3 in kdemain (argc=<optimized out>, argv=<optimized out>) at /ws/frameworks/applications/konqueror/src/konqmain.cpp:276 #47 0x00007f2c98cd1571 in __libc_start_main () from /lib64/libc.so.6 #48 0x000056078341cbda in _start () Since the assert was added in order to force the callers to fix themselves, I'm assuming that the solution is to check for an invalid URL in KIO::rawErrorDetail() and also in KonqFeedIcon::feedFound(). -- You are receiving this mail because: You are watching all bug changes.