Issue #13612 has been updated by rovf (Ronald Fischer).

File segf_test.rb added

nobu (Nobuyoshi Nakada) wrote:
> And 2.3.3 has been outdated, try 2.3.4, 2.4.1, or trunk.

I just verified: There is no newer port available for Cygwin, at least not on those mirrors, which Cygwin offers.

However, I have included a highly simplified version of the original code, which crashes. The crash looks different, in that we don't get a backtrace (like in the original case), but like in the original version, it happens only after the program runs for a while, and with my tests, it terminates always at the same point. If you try it, please make sure that you install the 64-bit version of Cygwin, not the 32-bit. I'm running it on Windows 7. If possible, try to execute it on the same platform.

The program is supposed to do a counting loop, for instance when invoked by

    ruby segf_test.rb 5

it counts from 0 to 4.

If I run the program with

     ruby segf_test.rb 99999

the program terminates already at count 12685.

One notable thing is that the behaviour is very sensitive to what's in the source code. For example, you will see that the code contains a class named Cnt, which is never used; but when I remove the (unnecessary) class definition, the bug does not occur. It counts correctly up to 99998.

Also, I found that if I just add another "puts" at the very end of the code, the bug also disappears. This suggests that the bug has something to do with how the compiler arranges the code.  

----------------------------------------
Bug #13612: Segmentation Fault
https://bugs.ruby-lang.org/issues/13612#change-65180

* Author: rovf (Ronald Fischer)
* Status: Feedback
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-cygwin]
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
I got a segmentation fault, fllowed by the message "You may have encountered a bug in the Ruby interpreter or extension libraries.". See attachment.

The exception occured in this piece of code:

```ruby
  class EXPERT

    FIND_CHAIN_FOR_POS_FILTER_PIPELINE =
      [
        :no_filter,
        :filter_by_etkz_e,
        :filter_chain_in_chain,
      ].each

    def find_chain_for_pos(sw_lines_for_module, wsc_sw_lines)

      FIND_CHAIN_FOR_POS_FILTER_PIPELINE.rewind

      begin

        while NVP.multiple_grpids?(sw_lines_for_module)

          filter_method_symb = FIND_CHAIN_FOR_POS_FILTER_PIPELINE.next # <----- This is line 30, where the exception reportedly occured.

          sw_lines_for_module = NVP.send(filter_method_symb, br, sw_lines_for_module)

        end

      rescue StopIteration

        LOG.trace "Could not find unique GRPID"

      end

    end
  end
```

The segmentation fault occurs only after this method has been executed repeatedly several hundred times.


---Files--------------------------------
ruby_segf.txt (18.5 KB)
segf_test.rb (1.49 KB)


-- 
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>