Curly-braces in "Help -> Search for..." crashes Creator.

Task-number: QTCREATORBUG-6212

We need to escape special characters that are used inside the
search engine as field delimiter. As soon as the search engine
proccesses the search string it will remove the character and
we might end up with an invalid string, forcing it to throw an
exception thats not catched.

Change-Id: I8b66c87c3137a1f175ead5df85c7f53fdcb5193e
Reviewed-by: Eike Ziller <eike.ziller@nokia.com>
This commit is contained in:
kh1
2012-03-16 15:41:59 +01:00
committed by Karsten Heimrich
parent d880c74554
commit 38fe616d85

View File

@@ -153,8 +153,33 @@ void SearchWidget::showEvent(QShowEvent *event)
void SearchWidget::search() const void SearchWidget::search() const
{ {
QList<QHelpSearchQuery> query = searchEngine->queryWidget()->query(); static QStringList charsToEscapeList;
searchEngine->search(query); if (charsToEscapeList.isEmpty()) {
charsToEscapeList << QLatin1String("\\") << QLatin1String("+")
<< QLatin1String("-") << QLatin1String("!") << QLatin1String("(")
<< QLatin1String(")") << QLatin1String(":") << QLatin1String("^")
<< QLatin1String("[") << QLatin1String("]") << QLatin1String("{")
<< QLatin1String("}") << QLatin1String("~");
}
static QString escapeChar(QLatin1String("\\"));
static QRegExp regExp(QLatin1String("[\\+\\-\\!\\(\\)\\^\\[\\]\\{\\}~:]"));
QList<QHelpSearchQuery> escapedQueries;
const QList<QHelpSearchQuery> queries = searchEngine->queryWidget()->query();
foreach (const QHelpSearchQuery &query, queries) {
QHelpSearchQuery escapedQuery;
escapedQuery.fieldName = query.fieldName;
foreach (QString word, query.wordList) {
if (word.contains(regExp)) {
foreach (const QString &charToEscape, charsToEscapeList)
word.replace(charToEscape, escapeChar + charToEscape);
escapedQuery.wordList.append(word);
}
}
escapedQueries.append(escapedQuery);
}
searchEngine->search(escapedQueries);
} }
void SearchWidget::searchingStarted() void SearchWidget::searchingStarted()