From 41f6ca18ea2d1b4eb29900566988efd9e25ac3ef Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 27 Nov 2013 08:53:34 -0700 Subject: [PATCH] Prevent the user from naming an object with "::" #91 --- .../chaiscript/dispatchkit/dispatchkit.hpp | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/include/chaiscript/dispatchkit/dispatchkit.hpp b/include/chaiscript/dispatchkit/dispatchkit.hpp index 72c73ca..7c964f8 100644 --- a/include/chaiscript/dispatchkit/dispatchkit.hpp +++ b/include/chaiscript/dispatchkit/dispatchkit.hpp @@ -53,9 +53,31 @@ namespace chaiscript private: std::string m_word; - }; + /** + * Exception thrown in the case that an object name is invalid because it contains illegal characters + */ + class illegal_name_error : public std::runtime_error + { + public: + illegal_name_error(const std::string &t_name) throw() + : std::runtime_error("Reserved name not allowed in object name: " + t_name), m_name(t_name) + { + } + + virtual ~illegal_name_error() throw() {} + + std::string name() const + { + return m_name; + } + + private: + std::string m_name; + }; + + /** * Exception thrown in the case that an object name is invalid because it already exists in current context */ @@ -1115,6 +1137,10 @@ namespace chaiscript */ void validate_object_name(const std::string &name) const { + if (name.find("::") != std::string::npos) { + throw exception::illegal_name_error(name); + } + chaiscript::detail::threading::shared_lock l(m_mutex); if (m_state.m_reserved_words.find(name) != m_state.m_reserved_words.end())