Issue #9454 has been updated by Rei Odaira.


FYI, `TestException#test_machine_stackoverflow_by_define_method` fails on my environment, too: Linux 2.6.32-71.el6.x86_64 and glibc 2.12-1.7.el6.

~~~
$ ruby -v
ruby 2.2.0dev (2014-04-01 trunk 45498) [x86_64-linux]
~~~
The problem is that `pthread_attr_getstack()` and even `getrlimit()` return0xa00000 (= 10 MB) as a max stack size, but the actual stack size at thetime of the stack overflow seems bigger by about 2 MB, according to /proc/PID/maps.

~~~
7fe1f7664000-7fe1f7afe000 rw-p 00000000 00:00 0                          [heap]
7fffc0836000-7fffc1435000 rw-p 00000000 00:00 0                          [stack]
7fffc15d4000-7fffc15d5000 r-xp 00000000 00:00 0                          [vdso]
~~~
0x7fffc1435000 - 0x7fffc1435000 = 0xbff000 (= ~12 MB). As a result, theaddress causing SIGSEGV is not considered as part of the stack.

----------------------------------------
Bug #9454: The define_method(:class) segfault
https://bugs.ruby-lang.org/issues/9454#change-46055

* Author: Kyrylo Silin
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]
* Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Ruby 2.1.0p0 segfaults when I invoke the following code.

    define_method(:class) { self.class }
    self.class #=> segfault :(

It affects exclusively Ruby 2.1.0p0 (I also tested on the most recent 2.0.0, 1.9.3 and 1.8.7).

By the way, on the contrary, the following code *does not segfault*.

    def self.class; self.class end
    self.class #=> SystemStackError

Viva la Ucraino revolucin!

---Files--------------------------------
bug9454.txt (625 KB)


-- 
https://bugs.ruby-lang.org/