[PATCH 1/2] test: add two known broken tests searching for xapian keywords

classic Classic list List threaded Threaded
2 messages Options
David Bremner-2 David Bremner-2
Reply | Threaded
Open this post in threaded view
|

[PATCH 1/2] test: add two known broken tests searching for xapian keywords

Thanks to plujon for pointing out this problem on IRC. The underlying
issue is that the quotes are stripped before the field processors get
the query string, and the heuristic for putting them back is not quite
right.
---
 test/T650-regexp-query.sh | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/test/T650-regexp-query.sh b/test/T650-regexp-query.sh
index 4085340f..7448c024 100755
--- a/test/T650-regexp-query.sh
+++ b/test/T650-regexp-query.sh
@@ -77,6 +77,19 @@ test_expect_equal_file cworth.msg-ids OUTPUT
 test_begin_subtest "xapian wildcard search for subject:"
 test_expect_equal $(notmuch count 'subject:count*') 1
 
+add_message '[from]="and"' '[subject]="and-and-and"'
+printf "id:$gen_msg_id\n" > EXPECTED
+
+test_begin_subtest "quoted xapian keyword search for from:"
+test_subtest_known_broken
+notmuch search --output=messages 'from:"and"' > OUTPUT
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "quoted xapian keyword search for subject:"
+test_subtest_known_broken
+notmuch search --output=messages 'subject:"and-and-and"' > OUTPUT
+test_expect_equal_file EXPECTED OUTPUT
+
 test_begin_subtest "regexp from search, case sensitive"
 notmuch search --output=messages from:/carl/ > OUTPUT
 test_expect_equal_file /dev/null OUTPUT
--
2.19.0

_______________________________________________
notmuch mailing list
[hidden email]
https://notmuchmail.org/mailman/listinfo/notmuch
David Bremner-2 David Bremner-2
Reply | Threaded
Open this post in threaded view
|

[PATCH 2/2] lib: use phrase search for anything not ending in '*'

Anything that does not look like a wildcard should be safe to
quote. This should fix the problem searching for xapian keywords.
---
 lib/regexp-fields.cc      | 2 +-
 test/T650-regexp-query.sh | 2 --
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/lib/regexp-fields.cc b/lib/regexp-fields.cc
index 084bc8c0..52f30d82 100644
--- a/lib/regexp-fields.cc
+++ b/lib/regexp-fields.cc
@@ -194,7 +194,7 @@ RegexpFieldProcessor::operator() (const std::string & str)
      * phrase parsing, when possible */
     std::string query_str;
 
-    if (str.find (' ') != std::string::npos)
+    if (*str.rbegin () != '*' || str.find (' ') != std::string::npos)
  query_str = '"' + str + '"';
     else
  query_str = str;
diff --git a/test/T650-regexp-query.sh b/test/T650-regexp-query.sh
index 7448c024..181e3856 100755
--- a/test/T650-regexp-query.sh
+++ b/test/T650-regexp-query.sh
@@ -81,12 +81,10 @@ add_message '[from]="and"' '[subject]="and-and-and"'
 printf "id:$gen_msg_id\n" > EXPECTED
 
 test_begin_subtest "quoted xapian keyword search for from:"
-test_subtest_known_broken
 notmuch search --output=messages 'from:"and"' > OUTPUT
 test_expect_equal_file EXPECTED OUTPUT
 
 test_begin_subtest "quoted xapian keyword search for subject:"
-test_subtest_known_broken
 notmuch search --output=messages 'subject:"and-and-and"' > OUTPUT
 test_expect_equal_file EXPECTED OUTPUT
 
--
2.19.0

_______________________________________________
notmuch mailing list
[hidden email]
https://notmuchmail.org/mailman/listinfo/notmuch