1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* lib/shellwords.rb (Shellwords#shellsplit): Fix a bug where

consecutive backslashes in double quotes are all removed except
  the one at the tail.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34285 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
knu 2012-01-12 18:42:03 +00:00
parent 44d20d61c7
commit 8c72fc9bf0
3 changed files with 16 additions and 1 deletions

View file

@ -1,3 +1,9 @@
Fri Jan 13 03:38:36 2012 Akinori MUSHA <knu@iDaemons.org>
* lib/shellwords.rb (Shellwords#shellsplit): Fix a bug where
consecutive backslashes in double quotes are all removed except
the one at the tail.
Fri Jan 13 03:28:00 2012 Luis Lavena <luislavena@gmail.com>
* ext/socket/extconf.rb (if ipv6): only define _WIN32_WINNT if was not

View file

@ -41,7 +41,7 @@ module Shellwords
line.scan(/\G\s*(?>([^\s\\\'\"]+)|'([^\']*)'|"((?:[^\"\\]|\\.)*)"|(\\.?)|(\S))(\s|\z)?/m) do
|word, sq, dq, esc, garbage, sep|
raise ArgumentError, "Unmatched double quote: #{line.inspect}" if garbage
field << (word || sq || (dq || esc).gsub(/\\(?=.)/, ''))
field << (word || sq || (dq || esc).gsub(/\\(.)/, '\\1'))
if sep
words << field
field = ''

View file

@ -38,6 +38,15 @@ class TestShellwords < Test::Unit::TestCase
end
end
def test_backslashes
cmdline, expected = [
%q{/a//b///c////d/////e/ "/a//b///c////d/////e/ "'/a//b///c////d/////e/ '/a//b///c////d/////e/ },
%q{a/b/c//d//e a/b/c//d//e /a//b///c////d/////e/ a/b/c//d//e }
].map { |str| str.tr("/", "\\\\") }
assert_equal [expected], shellwords(cmdline)
end
def test_multibyte_characters
# This is not a spec. It describes the current behavior which may
# be changed in future. There would be no multibyte character