From 1c9b5d452e9f2f675130f13393a031e28bf982d7 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Tue, 11 Jan 2022 11:45:24 +0900 Subject: [PATCH] Reject command line option ending with `-` --- ruby.c | 3 ++- test/ruby/test_rubyoptions.rb | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.c b/ruby.c index b98f125275..e26996ec90 100644 --- a/ruby.c +++ b/ruby.c @@ -1460,7 +1460,8 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) # define is_option_with_arg(name, allow_hyphen, allow_envopt) \ is_option_with_optarg(name, allow_hyphen, allow_envopt, Qtrue, Qtrue) # define is_option_with_optarg(name, allow_hyphen, allow_envopt, needs_arg, next_arg) \ - (strncmp((name), s, n = sizeof(name) - 1) == 0 && is_option_end(s[n], (allow_hyphen)) ? \ + (strncmp((name), s, n = sizeof(name) - 1) == 0 && is_option_end(s[n], (allow_hyphen)) && \ + (s[n] != '-' || s[n+1]) ? \ (check_envopt(name, (allow_envopt)), s += n, \ need_argument(name, s, needs_arg, next_arg), 1) : 0) diff --git a/test/ruby/test_rubyoptions.rb b/test/ruby/test_rubyoptions.rb index c3dbef1b5e..2cbd902f1f 100644 --- a/test/ruby/test_rubyoptions.rb +++ b/test/ruby/test_rubyoptions.rb @@ -121,6 +121,8 @@ class TestRubyOptions < Test::Unit::TestCase assert_in_out_err(["--disable-gems", "--debug", "-e", "p $DEBUG"], "", %w(true), []) + + assert_in_out_err(["--disable-gems", "--debug-", "-e", "p $DEBUG"], "", %w(), /invalid option --debug-/) end q = Regexp.method(:quote)