diff --git a/src/engine/termgenerator.cpp b/src/engine/termgenerator.cpp --- a/src/engine/termgenerator.cpp +++ b/src/engine/termgenerator.cpp @@ -72,7 +72,8 @@ str = cleanString.normalized(QString::NormalizationForm_KC); if (!str.isEmpty()) { - list << str.toUtf8(); + // Truncate the string to avoid arbitrarily long terms + list << str.leftRef(maxTermSize).toUtf8(); } } } @@ -85,7 +86,6 @@ const QByteArrayList terms = termList(text); for (const QByteArray& term : terms) { QByteArray finalArr = prefix + term; - finalArr = finalArr.mid(0, maxTermSize); m_doc.addPositionTerm(finalArr, m_position); m_position++; @@ -97,7 +97,6 @@ const QByteArrayList terms = termList(text); for (const QByteArray& term : terms) { QByteArray finalArr = prefix + term; - finalArr = finalArr.mid(0, maxTermSize); m_doc.addFileNamePositionTerm(finalArr, m_position); m_position++; @@ -114,7 +113,6 @@ const QByteArrayList terms = termList(text); for (const QByteArray& term : terms) { QByteArray finalArr = prefix + term; - finalArr = finalArr.mid(0, maxTermSize); m_doc.addXattrPositionTerm(finalArr, m_position); m_position++; diff --git a/src/lib/searchstore.cpp b/src/lib/searchstore.cpp --- a/src/lib/searchstore.cpp +++ b/src/lib/searchstore.cpp @@ -328,7 +328,13 @@ int position = 1; for (const QByteArray& term : terms) { QByteArray arr = prefix + term; - queries << EngineQuery(arr, position++); + // FIXME - compatibility hack, to find truncated terms with old + // DBs, remove on next DB bump + if (arr.size() > 25) { + queries << EngineQuery(arr.left(25), EngineQuery::StartsWith, position++); + } else { + queries << EngineQuery(arr, position++); + } } if (queries.isEmpty()) {