# HG changeset patch # User Timo Sirainen # Date 1312463780 -10800 # Node ID a767969ac1c81bc41279556c31c61f6b532f75be # Parent 558a50f1c593b213ae235b01655ede92b03f877c fts-lucene: Don't crash when trying to search an unsearchable word. diff -r 558a50f1c593 -r a767969ac1c8 src/plugins/fts-lucene/lucene-wrapper.cc --- 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)