diff options
author | Markus Roberts <Markus@reality.com> | 2010-08-05 22:00:54 -0700 |
---|---|---|
committer | Markus Roberts <Markus@reality.com> | 2010-08-05 22:23:04 -0700 |
commit | a23d80aebabf981a34fcca5c8bd2aa5f44ea832d (patch) | |
tree | 0b033e3875a1517f0ddd6aa6ccea2bc9dd9063cd /lib/puppet/parser | |
parent | 8e31b528e139a2940d6932ab80375bb5eebfbe29 (diff) | |
download | puppet-a23d80aebabf981a34fcca5c8bd2aa5f44ea832d.tar.gz puppet-a23d80aebabf981a34fcca5c8bd2aa5f44ea832d.tar.xz puppet-a23d80aebabf981a34fcca5c8bd2aa5f44ea832d.zip |
Fixes #4485 -- single quoted strings should not treat \n as new line
This is the rest of the change for #4303; James and I discussed various
ways the solution to that ticket needed to be extended but, as neither of us
committed code, nothing changed. This is the least implact extension, which
mimics the behaviour of prior versions.
It leaves open the question: should '\\x' start with a single or double
backslash? If, as now, '\\x' starts with a double backslash (i.e. single quote
is the only escapable characterin single quoted strings) a string ending in a
backslash can not be represented in a single quoted string.
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r-- | lib/puppet/parser/lexer.rb | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/puppet/parser/lexer.rb b/lib/puppet/parser/lexer.rb index 24999bf4e..a25a17e3f 100644 --- a/lib/puppet/parser/lexer.rb +++ b/lib/puppet/parser/lexer.rb @@ -221,7 +221,7 @@ class Puppet::Parser::Lexer TOKENS.add_token :RETURN, "\n", :skip => true, :incr_line => true, :skip_text => true TOKENS.add_token :SQUOTE, "'" do |lexer, value| - [TOKENS[:STRING], lexer.slurpstring(value,["'"],:ignore_invalid_esapes).first ] + [TOKENS[:STRING], lexer.slurpstring(value,["'"],:ignore_invalid_escapes).first ] end DQ_initial_token_types = {'$' => :DQPRE,'"' => :STRING} @@ -523,17 +523,17 @@ class Puppet::Parser::Lexer str = @scanner.scan_until(/([^\\]|^)[#{terminators}]/) or lex_error "Unclosed quote after '#{last}' in '#{rest}'" @line += str.count("\n") # literal carriage returns add to the line count. str.gsub!(/\\(.)/) { - case ch=$1 - when 'n'; "\n" - when 't'; "\t" - when 's'; " " - else - if escapes.include? ch - ch - else - Puppet.warning "Unrecognised escape sequence '\\#{ch}'#{file && " in file #{file}"}#{line && " at line #{line}"}" unless ignore_invalid_escapes - "\\#{ch}" + ch = $1 + if escapes.include? ch + case ch + when 'n'; "\n" + when 't'; "\t" + when 's'; " " + else ch end + else + Puppet.warning "Unrecognised escape sequence '\\#{ch}'#{file && " in file #{file}"}#{line && " at line #{line}"}" unless ignore_invalid_escapes + "\\#{ch}" end } [ str[0..-2],str[-1,1] ] |