* ruby.c (process_options, load_file_internal2): should not
  require other files when dump option is given.
  [ruby-dev:48712] [Bug #10435]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48175 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2014-10-28 07:22:43 +00:00
Родитель c98b8d622b
Коммит 4079a35447
3 изменённых файлов: 51 добавлений и 4 удалений

Просмотреть файл

@ -1,3 +1,9 @@
Tue Oct 28 16:22:41 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ruby.c (process_options, load_file_internal2): should not
require other files when dump option is given.
[ruby-dev:48712] [Bug #10435]
Tue Oct 28 14:51:38 2014 NARUSE, Yui <naruse@ruby-lang.org>
* configure.in: remove apple-gcc4.2 from CC candidates.

12
ruby.c
Просмотреть файл

@ -1415,8 +1415,10 @@ process_options(int argc, char **argv, struct cmdline_options *opt)
eenc = lenc;
}
rb_enc_associate(opt->e_script, eenc);
ruby_set_script_name(opt->script_name);
require_libraries(&opt->req_list);
if (!(opt->dump & ~DUMP_BIT(version_v))) {
ruby_set_script_name(opt->script_name);
require_libraries(&opt->req_list);
}
ruby_set_script_name(progname);
PREPARE_PARSE_MAIN({
@ -1612,8 +1614,10 @@ load_file_internal2(VALUE argp_v)
if (f != rb_stdin) rb_io_close(f);
f = Qnil;
}
ruby_set_script_name(opt->script_name);
require_libraries(&opt->req_list); /* Why here? unnatural */
if (!(opt->dump & ~DUMP_BIT(version_v))) {
ruby_set_script_name(opt->script_name);
require_libraries(&opt->req_list); /* Why here? unnatural */
}
}
if (opt->src.enc.index >= 0) {
enc = rb_enc_from_index(opt->src.enc.index);

Просмотреть файл

@ -710,4 +710,41 @@ class TestRubyOptions < Test::Unit::TestCase
bug7157 = '[ruby-core:47967]'
assert_in_out_err(['-p', '-e', 'sub(/t.*/){"TEST"}'], %[test], %w[TEST], [], bug7157)
end
def assert_norun_with_rflag(opt)
bug10435 = "[ruby-dev:48712] [Bug #10435]: should not run with #{opt} option"
stderr = []
Tempfile.create(%w"bug10435- .rb") do |script|
dir, base = File.split(script.path)
script.puts "abort ':run'"
script.close
opts = ['-C', dir, '-r', "./#{base}", opt]
assert_in_out_err([*opts, '-ep']) do |_, e|
stderr.concat(e)
end
stderr << "---"
assert_in_out_err([*opts, base]) do |_, e|
stderr.concat(e)
end
end
assert_not_include(stderr, ":run", bug10435)
end
def test_dump_syntax_with_rflag
assert_norun_with_rflag('-c')
assert_norun_with_rflag('--dump=syntax')
end
def test_dump_yydebug_with_rflag
assert_norun_with_rflag('-y')
assert_norun_with_rflag('--dump=yydebug')
end
def test_dump_parsetree_with_rflag
assert_norun_with_rflag('--dump=parsetree')
end
def test_dump_insns_with_rflag
assert_norun_with_rflag('--dump=insns')
end
end