forked from qt-creator/qt-creator
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: Karsten Heimrich <karsten.heimrich@digia.com>
This commit is contained in:
@@ -888,15 +888,9 @@ 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())
|
||||
links.insert(m_idFromContext, m_idFromContext);
|
||||
}
|
||||
}
|
||||
// Maybe the id is already an URL
|
||||
if (links.isEmpty() && LocalHelpManager::isValidUrl(m_idFromContext))
|
||||
links.insert(m_idFromContext, m_idFromContext);
|
||||
}
|
||||
|
||||
if (HelpViewer* viewer = viewerForContextMode()) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user