Mercurial > dovecot > core-2.2
changeset 13168:a767969ac1c8
fts-lucene: Don't crash when trying to search an unsearchable word.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 04 Aug 2011 16:16:20 +0300 |
parents | 558a50f1c593 |
children | 5ddba16842c7 |
files | src/plugins/fts-lucene/lucene-wrapper.cc |
diffstat | 1 files changed, 18 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/fts-lucene/lucene-wrapper.cc Thu Aug 04 15:49:49 2011 +0300 +++ b/src/plugins/fts-lucene/lucene-wrapper.cc Thu Aug 04 16:16:20 2011 +0300 @@ -582,9 +582,15 @@ Query *q1 = lucene_get_query(index, _T("hdr"), arg); Query *q2 = lucene_get_query(index, _T("body"), arg); - bq->add(q1, true, BooleanClause::SHOULD); - bq->add(q2, true, BooleanClause::SHOULD); - q = bq; + if (q1 == NULL && q2 == NULL) + q = NULL; + else { + if (q1 != NULL) + bq->add(q1, true, BooleanClause::SHOULD); + if (q2 != NULL) + bq->add(q2, true, BooleanClause::SHOULD); + q = bq; + } break; } case SEARCH_BODY: @@ -595,6 +601,10 @@ case SEARCH_HEADER_COMPRESS_LWSP: if (!fts_header_want_indexed(arg->hdr_field_name)) return false; + if (*arg->value.str == '\0') { + /* FIXME: handle existence of a search key */ + return false; + } q = lucene_get_query(index, t_lucene_utf8_to_tchar(arg->hdr_field_name), @@ -604,6 +614,11 @@ return false; } + if (q == NULL) { + /* couldn't handle this search after all (e.g. trying to search + a stop word) */ + return false; + } if (!and_args) query.add(q, true, BooleanClause::SHOULD); else if (!arg->match_not)