diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-09-21 06:41:07 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-09-21 06:41:07 +0000 |
commit | ac4b2d990c8484af7a214381e61d3494b6b858b1 (patch) | |
tree | 772448ed64eb627f8c03f37f4a5eaca95a29aecd /test/-ext- | |
parent | a810a1a78c6ed91debffc37d9f8e6bea07decbcf (diff) | |
download | ruby-ac4b2d990c8484af7a214381e61d3494b6b858b1.tar.gz |
escape all env properly.
* vm_backtrace.c (rb_debug_inspector_open): escape all env using
`rb_vm_stack_to_heap()` before making bindings.
[Bug #15105]
There is a complicated story of this issue:
Without this patch, IFUNC frame does not escaped. A IFUNC frame
points to CFUNC ep as previous ep. However, CFUNC ep can be escaped
because of making bindings of Ruby level frames.
IFUNC's ep can points to invalidated ep and `rb_iter_break()` will
fail. This is why `any?` fails.
* test/-ext-/debug/test_debug.rb: add a test.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64800 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/-ext-')
-rw-r--r-- | test/-ext-/debug/test_debug.rb | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/-ext-/debug/test_debug.rb b/test/-ext-/debug/test_debug.rb index 3804714d0d..da66b1baf8 100644 --- a/test/-ext-/debug/test_debug.rb +++ b/test/-ext-/debug/test_debug.rb @@ -56,4 +56,20 @@ class TestDebug < Test::Unit::TestCase binds = inspector_in_eval binds_check binds, bug7635 end + + class MyRelation + include Enumerable + + def each + yield :each_entry + end + end + + def test_lazy_block + x = MyRelation.new.any? do + Bug::Debug.inspector + true + end + assert_equal true, x, '[Bug #15105]' + end end |