tag: Disallow adding malformed tags to messages

This disallows adding empty tags, since nothing but confusion follows
in their wake, and disallows adding tags that begin with "-" because
they are also confusing, the tag "-" is impossible to remove using the
CLI, and because the syntax for removing such tags conflicts with long
argument syntax.

This does not place any restrictions on what tags can be removed, as
that would make it difficult for people who have the misfortune of
already having malformed tags to remove these tags.
This commit is contained in:
Austin Clements 2012-10-26 16:54:12 -04:00 committed by David Bremner
parent 02cafc84b4
commit e0a223d156
2 changed files with 15 additions and 0 deletions

View file

@ -203,6 +203,17 @@ notmuch_tag_command (void *ctx, int argc, char *argv[])
break; break;
} }
if (argv[i][0] == '+' || argv[i][0] == '-') { if (argv[i][0] == '+' || argv[i][0] == '-') {
if (argv[i][0] == '+' && argv[i][1] == '\0') {
fprintf(stderr, "Error: tag names cannot be empty.\n");
return 1;
}
if (argv[i][0] == '+' && argv[i][1] == '-') {
/* This disallows adding the non-removable tag "-" and
* enables notmuch tag to take long options in the
* future. */
fprintf(stderr, "Error: tag names must not start with '-'.\n");
return 1;
}
tag_ops[tag_ops_count].tag = argv[i] + 1; tag_ops[tag_ops_count].tag = argv[i] + 1;
tag_ops[tag_ops_count].remove = (argv[i][0] == '-'); tag_ops[tag_ops_count].remove = (argv[i][0] == '-');
tag_ops_count++; tag_ops_count++;

View file

@ -46,4 +46,8 @@ test_expect_equal "$output" "\
thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; One (:\" inbox tag1 unread) thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; One (:\" inbox tag1 unread)
thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Two (inbox tag1 tag4 unread)" thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Two (inbox tag1 tag4 unread)"
test_expect_code 1 "Empty tag names" 'notmuch tag + One'
test_expect_code 1 "Tag name beginning with -" 'notmuch tag +- One'
test_done test_done