Issue #13164 has been updated by Boaz Segev.
This is a good observation and I'm happy you found this...
However, I'm not sure that using `return size * 2` as a patch will solve the issue. It might end up masking the real issue, making it harder to find (although I might be wrong).
At the moment, there is a segmentation fault. Is it possible that the `size` returned is somehow effecting a memory address / pointer in a way that it shouldn't...?
----------------------------------------
Bug #13164: A second `SystemStackError` exception results in `Segmentation fault (core dumped)`
https://bugs.ruby-lang.org/issues/13164#change-62709
* Author: Boaz Segev
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
This issue is was exposed by leveraging the fact that `Object#hash` is implemented recursively for core Ruby datatypes (i.e., Hash and Array). See the discussion here: https://github.com/boazsegev/combine_pdf/pull/91#issuecomment-275552131.
TO reproduce the issue, explode the stack **twice**.
Expected results:
SystemStackError will be raised both times.
Actual results:
SystemStackError is raised once. The second time will cause a core dump.
Code to cause core dump:
~~~ ruby
def compute_nest_depth
h = {nest: {}}
nest = h[:nest]
i = 0
while true
i += 1
puts "nested #{i}" if ((i & 511) == 0)
next_nest = { nest: {} }
nest[:nest] = next_nest
nest = next_nest[:nest]
h.hash
end
rescue SystemStackError
puts "Stack exploded at nesting #{i}"
end
counter = 0;
while(true)
begin
counter +=1
puts "starting test #{counter}"
compute_nest_depth
rescue SystemStackError => e
nil
ensure
puts "test #{counter} complete"
end
end
~~~
results:
~~~
starting test 1
nested 512
nested 1024
nested 1536
nested 2048
nested 2560
Stack exploded at nesting 2783
test 1 complete
starting test 2
nested 512
nested 1024
nested 1536
nested 2048
nested 2560
Segmentation fault (core dumped)
~~~
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>