dovecot-2.2: lib-fts: fts-tokenizer-address didn't reset state p...
dovecot at dovecot.org
dovecot at dovecot.org
Sat May 9 10:54:31 UTC 2015
details: http://hg.dovecot.org/dovecot-2.2/rev/363397c3701e
changeset: 18579:363397c3701e
user: Timo Sirainen <tss at iki.fi>
date: Sat May 09 13:46:37 2015 +0300
description:
lib-fts: fts-tokenizer-address didn't reset state properly when input ended.
diffstat:
src/lib-fts/fts-tokenizer-address.c | 11 +++++++++--
src/lib-fts/test-fts-tokenizer.c | 13 +++++++++++++
2 files changed, 22 insertions(+), 2 deletions(-)
diffs (48 lines):
diff -r eff53aa9cb58 -r 363397c3701e src/lib-fts/fts-tokenizer-address.c
--- a/src/lib-fts/fts-tokenizer-address.c Sat May 09 13:31:14 2015 +0300
+++ b/src/lib-fts/fts-tokenizer-address.c Sat May 09 13:46:37 2015 +0300
@@ -217,12 +217,19 @@
/* end of data, output lingering tokens. first the parents data, then
possibly our token, if complete enough */
if (size == 0) {
+ if (tok->state == EMAIL_ADDRESS_PARSER_STATE_DOMAIN &&
+ domain_is_empty(tok)) {
+ /* user@ without domain - reset state */
+ str_truncate(tok->last_word, 0);
+ tok->state = EMAIL_ADDRESS_PARSER_STATE_NONE;
+ }
+
if (fts_tokenizer_address_parent_data(tok, token_r))
return 1;
- if (tok->state == EMAIL_ADDRESS_PARSER_STATE_DOMAIN &&
- !domain_is_empty(tok))
+ if (tok->state == EMAIL_ADDRESS_PARSER_STATE_DOMAIN)
return fts_tokenizer_address_current_token(tok, token_r);
+ tok->state = EMAIL_ADDRESS_PARSER_STATE_NONE;
}
/* 1) regular input data OR
diff -r eff53aa9cb58 -r 363397c3701e src/lib-fts/test-fts-tokenizer.c
--- a/src/lib-fts/test-fts-tokenizer.c Sat May 09 13:31:14 2015 +0300
+++ b/src/lib-fts/test-fts-tokenizer.c Sat May 09 13:46:37 2015 +0300
@@ -554,6 +554,19 @@
eopp++;
}
test_assert(*eopp == NULL);
+
+ test_assert(fts_tokenizer_next(tok, (const void *)"foo", 3, &token) == 0);
+ test_assert(fts_tokenizer_next(tok, NULL, 0, &token) > 0);
+ test_assert(fts_tokenizer_next(tok, NULL, 0, &token) == 0);
+
+ test_assert(fts_tokenizer_next(tok, (const void *)"bar at baz", 7, &token) == 0);
+ test_assert(fts_tokenizer_next(tok, NULL, 0, &token) > 0);
+ test_assert(fts_tokenizer_next(tok, NULL, 0, &token) == 0);
+
+ test_assert(fts_tokenizer_next(tok, (const void *)"foo@", 4, &token) == 0);
+ test_assert(fts_tokenizer_next(tok, NULL, 0, &token) > 0);
+ test_assert(fts_tokenizer_next(tok, NULL, 0, &token) == 0);
+
fts_tokenizer_unref(&tok);
fts_tokenizer_unref(&gen_tok);
fts_tokenizers_deinit();
More information about the dovecot-cvs
mailing list