[PATCH 2/2] emacs: Use whitelist instead of blacklist for term escaping

Subject: [PATCH 2/2] emacs: Use whitelist instead of blacklist for term escaping

Date: Tue, 11 Mar 2014 18:19:54 -0400

To: notmuch@notmuchmail.org

Cc:

From: Austin Clements


Previously, the term escaper used a blacklist of characters that
needed escaping.  This blacklist turned out to be somewhat incomplete;
for example, it did not contain non-whitespace ASCII control
characters or Unicode "fancy quotes", both of which do require the
term to be escaped.

Switch to a whitelist of characters that are definitely safe to leave
unquoted.  This fixes the broken test introduced by the previous
patch.
---
 emacs/notmuch-lib.el | 5 ++++-
 test/T310-emacs.sh   | 1 -
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
index 2fefdad..b071b2f 100644
--- a/emacs/notmuch-lib.el
+++ b/emacs/notmuch-lib.el
@@ -426,7 +426,10 @@ user-friendly queries."
 
   (save-match-data
     (if (or (equal term "")
-	    (string-match "[ ()]\\|^\"" term))
+	    ;; To be pessimistic, only pass through terms composed
+	    ;; entirely of ASCII printing characters other than ", (,
+	    ;; and ).
+	    (string-match "[^!#-'*-~]" term))
 	;; Requires escaping
 	(concat "\"" (replace-regexp-in-string "\"" "\"\"" term t t) "\"")
       term)))
diff --git a/test/T310-emacs.sh b/test/T310-emacs.sh
index 6c18bbd..ac966e5 100755
--- a/test/T310-emacs.sh
+++ b/test/T310-emacs.sh
@@ -954,7 +954,6 @@ output=$(notmuch search --output=messages 'tag:search-global-race-tag')
 test_expect_equal "$output" "id:$gen_msg_id_1"
 
 test_begin_subtest "Term escaping"
-test_subtest_known_broken
 output=$(test_emacs "(mapcar 'notmuch-escape-boolean-term (list
 	\"\"
 	\"abc\`~\!@#\$%^&*-=_+123\"
-- 
1.8.4.rc3


Thread: