diff options
| -rw-r--r-- | lib/puppet/parser/scope.rb | 4 | ||||
| -rwxr-xr-x | test/language/scope.rb | 17 |
2 files changed, 21 insertions, 0 deletions
diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb index 27de8ffd8..7239feb17 100644 --- a/lib/puppet/parser/scope.rb +++ b/lib/puppet/parser/scope.rb @@ -631,6 +631,10 @@ module Puppet::Parser # hash. We store the object ID, not class name, so that we # can support multiple unrelated classes with the same name. def setclass(id, name) + unless name =~ /^[a-z]\w*$/ + raise Puppet::ParseError, "Invalid class name '%s'" % name + end + if self.topscope? @classtable[id] = name else diff --git a/test/language/scope.rb b/test/language/scope.rb index 06d244543..48689cd2e 100755 --- a/test/language/scope.rb +++ b/test/language/scope.rb @@ -546,4 +546,21 @@ class TestScope < Test::Unit::TestCase assert_equal("root", obj["owner"], "Owner did not take") assert_equal("755", obj["mode"], "Mode did not take") end + + def test_validclassnames + scope = Puppet::Parser::Scope.new() + + ["a-class", "a class", "Class", "a.class"].each do |bad| + assert_raise(Puppet::ParseError, "Incorrectly allowed %s" % bad.inspect) do + scope.setclass(object_id, bad) + end + end + + ["a_class", "class", "yayNess"].each do |good| + assert_nothing_raised("Incorrectly banned %s" % good.inspect) do + scope.setclass(object_id, good) + end + end + + end end |
