summaryrefslogtreecommitdiff
path: root/src/option_manager.hh
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-09-27 09:54:55 +0100
committerMaxime Coste <frrrwww@gmail.com>2016-09-27 09:54:55 +0100
commit1b9eb2c6ba6da849480c299d06abb9bdd9f87786 (patch)
treea8fa0902835700d8209cb163a18d55ebbf518f7d /src/option_manager.hh
parentb74a268552289cc019e2b015678f0fbd1c9e64d9 (diff)
Validate option names to be in [a-zA-Z0-9_]
Closes #824
Diffstat (limited to 'src/option_manager.hh')
-rw-r--r--src/option_manager.hh11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/option_manager.hh b/src/option_manager.hh
index da7dd699..ed0c1ed0 100644
--- a/src/option_manager.hh
+++ b/src/option_manager.hh
@@ -216,13 +216,22 @@ public:
const T& value,
OptionFlags flags = OptionFlags::None)
{
+ auto is_not_identifier = [](char c) {
+ return (c < 'a' or c > 'z') and
+ (c < 'A' or c > 'Z') and
+ (c < '0' or c > '9') and c != '_';
+ };
+
+ if (contains_that(name, is_not_identifier))
+ throw runtime_error{format("name '{}' contains char out of [a-zA-Z0-9_]", name)};
+
auto& opts = m_global_manager.m_options;
auto it = find_option(opts, name);
if (it != opts.end())
{
if ((*it)->is_of_type<T>() and (*it)->flags() == flags)
return **it;
- throw runtime_error(format("option '{}' already declared with different type or flags", name));
+ throw runtime_error{format("option '{}' already declared with different type or flags", name)};
}
String doc = docstring.empty() ? format("[{}]", option_type_name<T>::name())
: format("[{}] - {}", option_type_name<T>::name(), docstring);