+1, though I wonder if we should either allow /blah/i or have the
setting affect regular expressions as well (probably not if it's to be
deprecated).

On Wed, Mar 3, 2010 at 11:37 AM, Brice Figureau
<[email protected]> wrote:
> The issue is that case/selectors are downcasing the value before it
> is compared to the options.
> Unfortunately regex are matching in a case sensitive way, which would
> make the following manifest fail:
>
> $var = "CaseSensitive"
> case $var {
>  /CaseSensitive/: {
>     notice("worked")
>  }
>  default: {
>    fail "miserably"
>  }
> }
>
> This patch fixes the issue by making sure the regexp match is done
> one the original (not downcased) value, but still doing a case
> sensitive match.
>
> Signed-off-by: Brice Figureau <[email protected]>
> ---
>  lib/puppet/parser/ast/casestatement.rb |    4 +---
>  lib/puppet/parser/ast/leaf.rb          |    1 +
>  lib/puppet/parser/ast/selector.rb      |    2 --
>  spec/unit/parser/ast/casestatement.rb  |   10 ----------
>  spec/unit/parser/ast/leaf.rb           |   13 +++++++++++++
>  spec/unit/parser/ast/selector.rb       |   10 ----------
>  6 files changed, 15 insertions(+), 25 deletions(-)
>
> diff --git a/lib/puppet/parser/ast/casestatement.rb 
> b/lib/puppet/parser/ast/casestatement.rb
> index 25b0fc6..64298ca 100644
> --- a/lib/puppet/parser/ast/casestatement.rb
> +++ b/lib/puppet/parser/ast/casestatement.rb
> @@ -12,8 +12,6 @@ class Puppet::Parser::AST
>         # the first option that matches.
>         def evaluate(scope)
>             value = @test.safeevaluate(scope)
> -            sensitive = Puppet[:casesensitive]
> -            value = value.downcase if ! sensitive and 
> value.respond_to?(:downcase)
>
>             retvalue = nil
>             found = false
> @@ -22,7 +20,7 @@ class Puppet::Parser::AST
>             default = nil
>             @options.each do |option|
>                 option.eachopt do |opt|
> -                    return option.safeevaluate(scope) if 
> opt.evaluate_match(value, scope, :file => file, :line => line, :sensitive => 
> sensitive)
> +                    return option.safeevaluate(scope) if 
> opt.evaluate_match(value, scope, :file => file, :line => line, :sensitive => 
> Puppet[:casesensitive])
>                 end
>
>                 default = option if option.default?
> diff --git a/lib/puppet/parser/ast/leaf.rb b/lib/puppet/parser/ast/leaf.rb
> index c8ac6f7..ee7ee02 100644
> --- a/lib/puppet/parser/ast/leaf.rb
> +++ b/lib/puppet/parser/ast/leaf.rb
> @@ -16,6 +16,7 @@ class Puppet::Parser::AST
>             if ! options[:sensitive] && obj.respond_to?(:downcase)
>                 obj = obj.downcase
>             end
> +            value = value.downcase if not options[:sensitive] and 
> value.respond_to?(:downcase)
>             obj == value
>         end
>
> diff --git a/lib/puppet/parser/ast/selector.rb 
> b/lib/puppet/parser/ast/selector.rb
> index 84bc2a7..ce834b6 100644
> --- a/lib/puppet/parser/ast/selector.rb
> +++ b/lib/puppet/parser/ast/selector.rb
> @@ -17,8 +17,6 @@ class Puppet::Parser::AST
>
>             sensitive = Puppet[:casesensitive]
>
> -            paramvalue = paramvalue.downcase if not sensitive and 
> paramvalue.respond_to?(:downcase)
> -
>             default = nil
>
>             unless @values.instance_of? AST::ASTArray or @values.instance_of? 
> Array
> diff --git a/spec/unit/parser/ast/casestatement.rb 
> b/spec/unit/parser/ast/casestatement.rb
> index 554e295..657648e 100755
> --- a/spec/unit/parser/ast/casestatement.rb
> +++ b/spec/unit/parser/ast/casestatement.rb
> @@ -28,16 +28,6 @@ describe Puppet::Parser::AST::CaseStatement do
>             @casestmt.evaluate(@scope)
>         end
>
> -        it "should downcase the evaluated test value if allowed" do
> -            Puppet.stubs(:[]).with(:casesensitive).returns(false)
> -            value = stub 'test'
> -           �[email protected](:safeevaluate).with(@scope).returns(value)
> -
> -            value.expects(:downcase)
> -
> -           �[email protected](@scope)
> -        end
> -
>         it "should scan each option" do
>             @options.expects(:each).multiple_yields(@option1, @option2)
>
> diff --git a/spec/unit/parser/ast/leaf.rb b/spec/unit/parser/ast/leaf.rb
> index fecfba3..62ebc2a 100755
> --- a/spec/unit/parser/ast/leaf.rb
> +++ b/spec/unit/parser/ast/leaf.rb
> @@ -33,6 +33,13 @@ describe Puppet::Parser::AST::Leaf do
>
>             @leaf.evaluate_match("value", @scope, :insensitive => true)
>         end
> +
> +        it "should downcase the parameter value if wanted" do
> +            parameter = stub 'parameter'
> +            parameter.expects(:downcase).returns("value")
> +
> +           �[email protected]_match(parameter, @scope, :insensitive => true)
> +        end
>     end
>
>     describe "when converting to string" do
> @@ -123,6 +130,12 @@ describe Puppet::Parser::AST::Regex do
>             @regex.evaluate_match("value", @scope)
>         end
>
> +        it "should not downcase the paramater value" do
> +           �[email protected](:match).with("VaLuE")
> +
> +           �[email protected]_match("VaLuE", @scope)
> +        end
> +
>         it "should set ephemeral scope vars if there is a match" do
>             @scope.expects(:ephemeral_from).with(true, nil, nil)
>
> diff --git a/spec/unit/parser/ast/selector.rb 
> b/spec/unit/parser/ast/selector.rb
> index 2ba83ad..f9a1efe 100755
> --- a/spec/unit/parser/ast/selector.rb
> +++ b/spec/unit/parser/ast/selector.rb
> @@ -40,16 +40,6 @@ describe Puppet::Parser::AST::Selector do
>             @selector.evaluate(@scope)
>         end
>
> -        it "should downcase the evaluated param value if allowed" do
> -            Puppet.stubs(:[]).with(:casesensitive).returns(false)
> -            value = stub 'param'
> -           �[email protected](:safeevaluate).with(@scope).returns(value)
> -
> -            value.expects(:downcase)
> -
> -           �[email protected](@scope)
> -        end
> -
>         it "should scan each option" do
>             @values.expects(:each).multiple_yields(@value1, @value2)
>
> --
> 1.6.6.1
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Puppet Developers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/puppet-dev?hl=en.
>
>



-- 
-----------------------------------------------------------
The power of accurate observation is
commonly called cynicism by those
who have not got it.  ~George Bernard Shaw
------------------------------------------------------------

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to