Issue #9683 has been updated by Nobuyoshi Nakada.


There are two stacks, VM stack and machine stack.
> def foo; foo end
causes VM stack overflow, but recursive default proc causes machine stack overflow.
The former is detected by the VM, so no dirty pages is used.

Your patch prevents infinite recursion before it actually occurs, and wouldbe more effective.
However, there can be other recursion calls, I'd want the way to fix them before applying it.


----------------------------------------
Bug #9683: Segmentation fault when using default proc feature in ruby Hash object
https://bugs.ruby-lang.org/issues/9683#change-46051

* Author: Eran Barak Levi
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin12.0]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------

  bruno-v2 rvm:(ruby-2.1.0) git:(master)  uname -a
Darwin erans-mbp.intkontera.com 13.1.0 Darwin Kernel Version 13.1.0: Thu Jan 16 19:40:37 PST 2014; root:xnu-2422.90.20~2/RELEASE_X86_64 x86_64
  bruno-v2 rvm:(ruby-2.1.0) git:(master)  rvm -v
rvm 1.25.19 (stable) by Wayne E. Seguin <wayneeseguin / gmail.com>, Michal Papis <mpapis / gmail.com> [https://rvm.io/]
  bruno-v2 rvm:(ruby-2.1.0) git:(master)  ruby -v                                                                            
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin12.0]
  bruno-v2 rvm:(ruby-2.1.0) git:(master)  ruby -e "a = Hash.new {|h,k| h[k] += 1};a[1]" 2> output                      
[1]    24934 segmentation fault  ruby -e "a = Hash.new {|h,k| h[k] += 1};a[1]" 2> output

more information in the attached files

---Files--------------------------------
ruby_2014-03-27-153720_Erans-MacBook-Pro.crash (45.3 KB)
output (489 KB)
9683.patch (1.31 KB)


-- 
https://bugs.ruby-lang.org/