Commit 94ca9e56 authored by Eike Ziller's avatar Eike Ziller
Browse files

Help: Avoid trying to open "Foo::bar" as a url in a browser.

Technically it is a valid URL with scheme "Foo" and path ":bar". With
this patch we only try to open URLs with very specific schemes like
"qthelp", "file", "http(s)", "about".

Task-number: QTCREATORBUG-7547
Change-Id: I6908ff554c12ca0f4cfc5bd0fb30dd659d780a23
Reviewed-by: default avatarKarsten Heimrich <>
parent a216d544
......@@ -888,16 +888,10 @@ void HelpPlugin::activateContext()
if (IContext *context = Core::ICore::currentContextObject()) {
m_idFromContext = context->contextHelpId();
links = HelpManager::linksForIdentifier(m_idFromContext);
if (links.isEmpty()) {
// Maybe this is already an URL...
// Require protocol specifier, otherwise most strings would be 'local file names'
if (m_idFromContext.contains(QLatin1Char(':'))) {
QUrl url(m_idFromContext);
if (url.isValid())
// Maybe the id is already an URL
if (links.isEmpty() && LocalHelpManager::isValidUrl(m_idFromContext))
links.insert(m_idFromContext, m_idFromContext);
if (HelpViewer* viewer = viewerForContextMode()) {
if (links.isEmpty()) {
......@@ -125,6 +125,24 @@ QVariant LocalHelpManager::engineFontSettings()
return helpEngine().customValue(Constants::FontKey, QVariant());
* Checks if the string does contain a scheme, and if that scheme is a "sensible" scheme for
* opening in a internal or external browser (qthelp, about, file, http, https).
* This is necessary to avoid trying to open e.g. "Foo::bar" in a external browser.
bool LocalHelpManager::isValidUrl(const QString &link)
QUrl url(link);
if (!url.isValid())
return false;
const QString scheme = url.scheme();
return (scheme == QLatin1String("qthelp")
|| scheme == QLatin1String("about")
|| scheme == QLatin1String("file")
|| scheme == QLatin1String("http")
|| scheme == QLatin1String("https"));
QByteArray LocalHelpManager::helpData(const QUrl &url)
const QHelpEngineCore &engine = helpEngine();
......@@ -58,6 +58,7 @@ public:
static BookmarkManager& bookmarkManager();
static QVariant engineFontSettings();
static bool isValidUrl(const QString &link);
Q_INVOKABLE QByteArray helpData(const QUrl &url);
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment