Add test demonstrating a position overlap bug.

Currently, whenever we call index_terms multiple times for a single
field, the term generator is being reset to position 0 each time. This
means that with text such as:

	To: a@b.c, x@y.z

one can get a bogus match by searching for:

	To: a@y.c

Thanks to Mark Anderson for reporting the bug, (and providing a nice,
minimal test case that inspired what is used here).
This commit is contained in:
Carl Worth 2011-01-26 15:19:31 +10:00
parent b64afb1ab9
commit fb54dee4ac
2 changed files with 38 additions and 1 deletions

View file

@ -16,7 +16,7 @@ fi
cd $(dirname "$0") cd $(dirname "$0")
TESTS="basic new search search-output search-by-folder json thread-naming raw reply dump-restore uuencode thread-order author-order from-guessing long-id encoding emacs maildir-sync" TESTS="basic new search search-output search-by-folder search-position-overlap-bug json thread-naming raw reply dump-restore uuencode thread-order author-order from-guessing long-id encoding emacs maildir-sync"
# Clean up any results from a previous run # Clean up any results from a previous run
rm -r test-results >/dev/null 2>/dev/null rm -r test-results >/dev/null 2>/dev/null

View file

@ -0,0 +1,37 @@
#!/bin/bash
# Test to demonstrate a position overlap bug.
#
# At one point, notmuch would index terms incorrectly in the case of
# calling index_terms multiple times for a single field. The term
# generator was being reset to position 0 each time. This means that
# with text such as:
#
# To: a@b.c, x@y.z
#
# one could get a bogus match by searching for:
#
# To: a@y.c
#
# Thanks to Mark Anderson for reporting the bug, (and providing a nice,
# minimal test case that inspired what is used here), in
# id:3wd4o8wa7fx.fsf@testarossa.amd.com
test_description='that notmuch does not overlap term positions'
. ./test-lib.sh
add_message '[to]="a@b.c, x@y.z"'
test_begin_subtest "Search for a@b.c matches"
output=$(notmuch search a@b.c | notmuch_search_sanitize)
test_expect_equal "$output" "thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Test message #1 (inbox unread)"
test_begin_subtest "Search for x@y.z matches"
output=$(notmuch search x@y.z | notmuch_search_sanitize)
test_expect_equal "$output" "thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Test message #1 (inbox unread)"
test_begin_subtest "Search for a@y.c must not match"
output=$(notmuch search a@y.c | notmuch_search_sanitize)
test_expect_equal "$output" ""
test_done