From 652b5ccbea930ed1e18f40cfe6fdc4c045b01ee7 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Fri, 12 Sep 2025 19:46:23 +0300 Subject: [PATCH] labels: tighten labels regexp --- lib/message/mu-labels.cc | 11 +++++++---- man/mu-labels.1.org | 14 ++++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/lib/message/mu-labels.cc b/lib/message/mu-labels.cc index c3822ddd..87b92e37 100644 --- a/lib/message/mu-labels.cc +++ b/lib/message/mu-labels.cc @@ -51,16 +51,16 @@ Mu::Labels::validate_label(const std::string &label) if (::iscntrl(uc)) return Err(Error{Error::Code::InvalidArgument, - "control character {} is not allowed", + "control character {} not allowed in label", static_cast(uc)}); if (::isblank(uc)) return Err(Error{Error::Code::InvalidArgument, - "blank character {} is not allowed", + "blank character {} not allowed in label", static_cast(uc)}); - if (uc == '"' || uc == '\'' || uc == '`' || + if (uc == '"' || uc == '\'' || uc == '`' || uc == ',' || uc == '\\' || uc == '/' || uc == '$') return Err(Error{Error::Code::InvalidArgument, - "character '{}' is not allowed", uc}); + "character '{}' not allowed in label", uc}); } return Ok(); @@ -217,11 +217,14 @@ test_validate_label() g_assert_true(!!validate_label("@raven+king")); g_assert_true(!!validate_label("operation:mindcrime")); 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("")); 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("\"quoted\"")); } diff --git a/man/mu-labels.1.org b/man/mu-labels.1.org index 88ed0f29..ad70479d 100644 --- a/man/mu-labels.1.org +++ b/man/mu-labels.1.org @@ -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 restrictions on what is accepted as a label. -- a *valid label character* is any character that is not a control-character, a - blank, or any of *'*, *"*, *`*, */*, *\*, *$* +- a *valid label character* is any character that is not a control-character, not + a blank, nor anything matching the regular expression ~[^\"$',/\\`]~ - a *valid label* consists of one or more valid label characters, the first of 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 have "pluto" in their subject: -#+begin_export + +#+begin_example $ mu labels update "subject:pluto" --labels -planet,+dwarf-planet -#+end_export +#+end_example Clear all labels from messages with the label "boring": -#+begin_export + +#+begin_example $ mu labels clear "label:boring" -#+end_export +#+end_example #+include: "prefooter.inc" :minlevel 1