summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2018-09-22 22:11:21 +1000
committerMaxime Coste <mawww@kakoune.org>2018-09-22 22:11:21 +1000
commit9c1c763a37b336db1ba77a4fb28d7ec4d044fe87 (patch)
tree04a48466bef7f0e7a10203dbaf275b928a20557e /src
parent9db9fe612d73cbad87ccd4102377884a301ab45a (diff)
Reject hook names that are not alphanumeric _ or - or start with -
Fixes #2414
Diffstat (limited to 'src')
-rw-r--r--src/commands.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/commands.cc b/src/commands.cc
index c3cf21da..7aad5549 100644
--- a/src/commands.cc
+++ b/src/commands.cc
@@ -866,6 +866,11 @@ const CommandDesc add_hook_cmd = {
Regex regex{parser[2], RegexCompileFlags::Optimize};
const String& command = parser[3];
auto group = parser.get_switch("group").value_or(StringView{});
+
+ if (any_of(group, [](char c) { return not is_word(c, { '-' }); }) or
+ (not group.empty() and not is_word(group[0])))
+ throw runtime_error{format("invalid group name '{}'", group)};
+
const auto flags = (parser.get_switch("always") ? HookFlags::Always : HookFlags::None) |
(parser.get_switch("once") ? HookFlags::Once : HookFlags::None);
get_scope(parser[0], context).hooks().add_hook(parser[1], group.str(), flags,