eval_intern.h: refine stack overflow detection

* eval_intern.h (TH_PUSH_TAG, TH_EXEC_TAG): refine stack overflow
  detection.  chain local tag after setjmp() successed on it, because
  calling setjmp() also can overflow the stack.
  [ruby-dev:47804] [Bug #9109]
* vm_eval.c (rb_catch_obj): now th->tag points previous tag until
  TH_EXEC_TAG().


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43707 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2013-11-18 13:47:56 +00:00
parent 53953eee7c
commit 340390093b
4 changed files with 20 additions and 5 deletions

View file

@ -477,6 +477,14 @@ end.join
assert_raise(SystemStackError){m}
end
def test_machine_stackoverflow
bug9109 = '[ruby-dev:47804] [Bug #9109]'
assert_separately([], <<-SRC)
h = {a: ->{h[:a].call}}
assert_raise(SystemStackError, #{bug9109.dump}) {h[:a].call}
SRC
end
def test_cause
msg = "[Feature #8257]"
cause = nil