From: bo@... Date: 2017-02-01T20:32:14+00:00 Subject: [ruby-core:79382] [Ruby trunk Bug#13164] A second `SystemStackError` exception results in `Segmentation fault (core dumped)` Issue #13164 has been updated by Boaz Segev. What about flattening recursion in core types (Hash, Array and Set)? I know this won't resolve the issue, but it will prevent `eql?` and `hash` from exploding the stack, so the issue is less likely to occur when there isn't an error in the code being executed. ---------------------------------------- Bug #13164: A second `SystemStackError` exception results in `Segmentation fault (core dumped)` https://bugs.ruby-lang.org/issues/13164#change-62809 * 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: