Skip to content

Commit

Permalink
getoptlong.rb: multiline regexps
Browse files Browse the repository at this point in the history
* lib/getoptlong.rb: make regexps multiline safe.
  [ruby-core:82627] [Bug #13858]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59722 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
nobu committed Sep 2, 2017
1 parent 0465916 commit 0f6e7ed
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 10 deletions.
20 changes: 10 additions & 10 deletions lib/getoptlong.rb
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ def set_options(*arguments)
#
next if i == argument_flag
begin
if !i.is_a?(String) || i !~ /^-([^-]|-.+)$/
if !i.is_a?(String) || i !~ /\A-([^-]|-.+)\z/
raise ArgumentError, "an invalid option `#{i}'"
end
if (@canonical_names.include?(i))
Expand Down Expand Up @@ -447,7 +447,7 @@ def get
terminate
return nil
elsif @ordering == PERMUTE
while 0 < ARGV.length && ARGV[0] !~ /^-./
while 0 < ARGV.length && ARGV[0] !~ /\A-./
@non_option_arguments.push(ARGV.shift)
end
if ARGV.length == 0
Expand All @@ -456,7 +456,7 @@ def get
end
argument = ARGV.shift
elsif @ordering == REQUIRE_ORDER
if (ARGV[0] !~ /^-./)
if (ARGV[0] !~ /\A-./)
terminate
return nil
end
Expand All @@ -477,7 +477,7 @@ def get
#
# Check for long and short options.
#
if argument =~ /^(--[^=]+)/ && @rest_singles.length == 0
if argument =~ /\A(--[^=]+)/ && @rest_singles.length == 0
#
# This is a long style option, which start with `--'.
#
Expand Down Expand Up @@ -507,7 +507,7 @@ def get
# Check an argument to the option.
#
if @argument_flags[option_name] == REQUIRED_ARGUMENT
if argument =~ /=(.*)$/
if argument =~ /=(.*)/m
option_argument = $1
elsif 0 < ARGV.length
option_argument = ARGV.shift
Expand All @@ -516,19 +516,19 @@ def get
"option `#{argument}' requires an argument")
end
elsif @argument_flags[option_name] == OPTIONAL_ARGUMENT
if argument =~ /=(.*)$/
if argument =~ /=(.*)/m
option_argument = $1
elsif 0 < ARGV.length && ARGV[0] !~ /^-./
elsif 0 < ARGV.length && ARGV[0] !~ /\A-./
option_argument = ARGV.shift
else
option_argument = ''
end
elsif argument =~ /=(.*)$/
elsif argument =~ /=(.*)/m
set_error(NeedlessArgument,
"option `#{option_name}' doesn't allow an argument")
end

elsif argument =~ /^(-(.))(.*)/
elsif argument =~ /\A(-(.))(.*)/m
#
# This is a short style option, which start with `-' (not `--').
# Short options may be catenated (e.g. `-l -g' is equivalent to
Expand All @@ -555,7 +555,7 @@ def get
if 0 < @rest_singles.length
option_argument = @rest_singles
@rest_singles = ''
elsif 0 < ARGV.length && ARGV[0] !~ /^-./
elsif 0 < ARGV.length && ARGV[0] !~ /\A-./
option_argument = ARGV.shift
else
option_argument = ''
Expand Down
6 changes: 6 additions & 0 deletions spec/rubyspec/library/getoptlong/shared/get.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,10 @@
lambda { @opts.send(@method) }.should raise_error(GetoptLong::MissingArgument)
end
end

it "returns multiline argument" do
argv [ "--size=\n10k\n" ] do
@opts.send(@method).should == [ "--size", "\n10k\n" ]
end
end
end

0 comments on commit 0f6e7ed

Please sign in to comment.