labels: tighten labels regexp

This commit is contained in:
Dirk-Jan C. Binnema
2025-09-12 19:46:23 +03:00
committed by Seth Ladygo
parent 54aaaf98c1
commit 652b5ccbea
2 changed files with 15 additions and 10 deletions

View File

@ -51,16 +51,16 @@ Mu::Labels::validate_label(const std::string &label)
if (::iscntrl(uc)) if (::iscntrl(uc))
return Err(Error{Error::Code::InvalidArgument, return Err(Error{Error::Code::InvalidArgument,
"control character {} is not allowed", "control character {} not allowed in label",
static_cast<int>(uc)}); static_cast<int>(uc)});
if (::isblank(uc)) if (::isblank(uc))
return Err(Error{Error::Code::InvalidArgument, return Err(Error{Error::Code::InvalidArgument,
"blank character {} is not allowed", "blank character {} not allowed in label",
static_cast<int>(uc)}); static_cast<int>(uc)});
if (uc == '"' || uc == '\'' || uc == '`' || if (uc == '"' || uc == '\'' || uc == '`' || uc == ',' ||
uc == '\\' || uc == '/' || uc == '$') uc == '\\' || uc == '/' || uc == '$')
return Err(Error{Error::Code::InvalidArgument, return Err(Error{Error::Code::InvalidArgument,
"character '{}' is not allowed", uc}); "character '{}' not allowed in label", uc});
} }
return Ok(); return Ok();
@ -217,11 +217,14 @@ test_validate_label()
g_assert_true(!!validate_label("@raven+king")); g_assert_true(!!validate_label("@raven+king"));
g_assert_true(!!validate_label("operation:mindcrime")); g_assert_true(!!validate_label("operation:mindcrime"));
g_assert_true(!!validate_label("😨")); g_assert_true(!!validate_label("😨"));
g_assert_true(!!validate_label("foo%bar+1"));
g_assert_false(!!validate_label("norrell strange")); g_assert_false(!!validate_label("norrell strange"));
g_assert_false(!!validate_label("")); g_assert_false(!!validate_label(""));
g_assert_false(!!validate_label("+")); g_assert_false(!!validate_label("+"));
g_assert_false(!!validate_label("-")); g_assert_false(!!validate_label("-"));
g_assert_false(!!validate_label("foo$bar"));
g_assert_false(!!validate_label("foo,bar"));
g_assert_false(!!validate_label("foo`bar")); g_assert_false(!!validate_label("foo`bar"));
g_assert_false(!!validate_label("\"quoted\"")); g_assert_false(!!validate_label("\"quoted\""));
} }

View File

@ -119,8 +119,8 @@ See *EXPORT FORMAT* below for details on the format.
*mu* does not wish to limit your creativity, but nevertheless puts a few *mu* does not wish to limit your creativity, but nevertheless puts a few
restrictions on what is accepted as a label. restrictions on what is accepted as a label.
- a *valid label character* is any character that is not a control-character, a - a *valid label character* is any character that is not a control-character, not
blank, or any of *'*, *"*, *`*, */*, *\*, *$* a blank, nor anything matching the regular expression ~[^\"$',/\\`]~
- a *valid label* consists of one or more valid label characters, the first of - a *valid label* consists of one or more valid label characters, the first of
which must *not* be either *+* or *-* which must *not* be either *+* or *-*
@ -165,14 +165,16 @@ it is recognized as a single parameter.
Remove the label "planet" and add the label "dwarf-planet" to all messages that Remove the label "planet" and add the label "dwarf-planet" to all messages that
have "pluto" in their subject: have "pluto" in their subject:
#+begin_export
#+begin_example
$ mu labels update "subject:pluto" --labels -planet,+dwarf-planet $ mu labels update "subject:pluto" --labels -planet,+dwarf-planet
#+end_export #+end_example
Clear all labels from messages with the label "boring": Clear all labels from messages with the label "boring":
#+begin_export
#+begin_example
$ mu labels clear "label:boring" $ mu labels clear "label:boring"
#+end_export #+end_example
#+include: "prefooter.inc" :minlevel 1 #+include: "prefooter.inc" :minlevel 1