From: nobu@... Date: 2017-04-14T13:05:56+00:00 Subject: [ruby-core:80687] [Ruby trunk Bug#13164][Open] A second `SystemStackError` exception results in `Segmentation fault (core dumped)` Issue #13164 has been updated by nobu (Nobuyoshi Nakada). Status changed from Closed to Open On Linux, fixed by unblocking the received signal. But it has no effect on mac OS and seems to need `--with-setjmp-type=setjmp`. ---------------------------------------- Bug #13164: A second `SystemStackError` exception results in `Segmentation fault (core dumped)` https://bugs.ruby-lang.org/issues/13164#change-64232 * Author: myst (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: