зеркало из https://github.com/github/ruby.git
* iseq.c (set_relation): do not use top_wrapper as bottom of cref,
which caused constant lookup error when "wrapped load" is used; instead, use Object as bottom, and push top_wrapper on Object. [ruby-core:25039] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27514 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
4af243a8af
Коммит
e02f7f79c2
|
@ -1,3 +1,10 @@
|
|||
Tue Apr 27 22:40:54 2010 Yusuke Endoh <mame@tsg.ne.jp>
|
||||
|
||||
* iseq.c (set_relation): do not use top_wrapper as bottom of cref,
|
||||
which caused constant lookup error when "wrapped load" is used;
|
||||
instead, use Object as bottom, and push top_wrapper on Object.
|
||||
[ruby-core:25039]
|
||||
|
||||
Tue Apr 27 21:24:40 2010 Yusuke Endoh <mame@tsg.ne.jp>
|
||||
|
||||
* eval.c (ruby_cleanup): before cleanup, check signal buffer and run
|
||||
|
|
9
iseq.c
9
iseq.c
|
@ -177,9 +177,16 @@ set_relation(rb_iseq_t *iseq, const VALUE parent)
|
|||
/* set class nest stack */
|
||||
if (type == ISEQ_TYPE_TOP) {
|
||||
/* toplevel is private */
|
||||
iseq->cref_stack = NEW_BLOCK(th->top_wrapper ? th->top_wrapper : rb_cObject);
|
||||
iseq->cref_stack = NEW_BLOCK(rb_cObject);
|
||||
iseq->cref_stack->nd_file = 0;
|
||||
iseq->cref_stack->nd_visi = NOEX_PRIVATE;
|
||||
if (th->top_wrapper) {
|
||||
NODE *cref = NEW_BLOCK(th->top_wrapper);
|
||||
cref->nd_file = 0;
|
||||
cref->nd_visi = NOEX_PRIVATE;
|
||||
cref->nd_next = iseq->cref_stack;
|
||||
iseq->cref_stack = cref;
|
||||
}
|
||||
}
|
||||
else if (type == ISEQ_TYPE_METHOD || type == ISEQ_TYPE_CLASS) {
|
||||
iseq->cref_stack = NEW_BLOCK(0); /* place holder */
|
||||
|
|
|
@ -197,6 +197,19 @@ class TestRequire < Test::Unit::TestCase
|
|||
assert_raise(ArgumentError) { at_exit }
|
||||
end
|
||||
|
||||
def test_load2 # [ruby-core:25039]
|
||||
t = Tempfile.new(["test_ruby_test_require", ".rb"])
|
||||
t.puts "Hello = 'hello'"
|
||||
t.puts "class Foo"
|
||||
t.puts " p Hello"
|
||||
t.puts "end"
|
||||
t.close
|
||||
|
||||
assert_in_out_err([], <<-INPUT, %w("hello"), [])
|
||||
load(#{ t.path.dump }, true)
|
||||
INPUT
|
||||
end
|
||||
|
||||
def test_tainted_loadpath
|
||||
t = Tempfile.new(["test_ruby_test_require", ".rb"])
|
||||
abs_dir, file = File.split(t.path)
|
||||
|
|
Загрузка…
Ссылка в новой задаче