summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrice Figureau <brice-puppet@daysofwonder.com>2009-09-21 22:48:30 +0200
committerJames Turnbull <james@lovedthanlost.net>2009-09-22 09:42:00 +1000
commit6551e86a03f5fa1f499386c96faa4587bdfac24e (patch)
treed8d7387759957ee5c74089e1f63e8492dcae2716
parenta5950339f43e08516130ff0b7463dbe3fa925890 (diff)
downloadpuppet-6551e86a03f5fa1f499386c96faa4587bdfac24e.tar.gz
puppet-6551e86a03f5fa1f499386c96faa4587bdfac24e.tar.xz
puppet-6551e86a03f5fa1f499386c96faa4587bdfac24e.zip
Fix #2664 - Mathematic expressions mis-lexed as Regex
This is not the real fix. It is just an hot-fix to limit the issue. The issue is that the lexer regexes have precedences over simple '/' (divide). In the following expression: $var = 4096 / 4 $var2 = "/tmp/file" The / 4... part is mis-lexed as a regex instead of a mathematical expression. The current fix limits regex to one-line. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
-rw-r--r--lib/puppet/parser/lexer.rb2
-rwxr-xr-xspec/unit/parser/lexer.rb4
2 files changed, 5 insertions, 1 deletions
diff --git a/lib/puppet/parser/lexer.rb b/lib/puppet/parser/lexer.rb
index e027a69d1..0db6c22f2 100644
--- a/lib/puppet/parser/lexer.rb
+++ b/lib/puppet/parser/lexer.rb
@@ -171,7 +171,7 @@ class Puppet::Parser::Lexer
[self,value]
end
- TOKENS.add_token :REGEX, %r{/[^/]*/} do |lexer, value|
+ TOKENS.add_token :REGEX, %r{/[^/\n]*/} do |lexer, value|
# Make sure we haven't matched an escaped /
while value[-2..-2] == '\\'
other = lexer.scan_until(%r{/})
diff --git a/spec/unit/parser/lexer.rb b/spec/unit/parser/lexer.rb
index 1c3e91bd6..3c73ca986 100755
--- a/spec/unit/parser/lexer.rb
+++ b/spec/unit/parser/lexer.rb
@@ -460,6 +460,10 @@ describe Puppet::Parser::Lexer::TOKENS[:REGEX] do
@token.regex.should =~ '/this is a regex/'
end
+ it 'should not match if there is \n in the regex' do
+ @token.regex.should_not =~ "/this is \n a regex/"
+ end
+
describe "when including escaped slashes" do
before { @lexer = Puppet::Parser::Lexer.new }