From: bo@... Date: 2017-01-28T20:46:30+00:00 Subject: [ruby-core:79296] [Ruby trunk Bug#13164] A second `SystemStackError` exception results in `Segmentation fault (core dumped)` 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: