ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:71737] [Ruby trunk - Bug #11750] [Open] SEGV with Enumerator, yield and proc.
       [not found] <redmine.issue-11750.20151129162428@ruby-lang.org>
@ 2015-11-29 16:24 ` akr
  2015-11-30  5:36 ` [ruby-core:71745] [Ruby trunk - Bug #11750] " nobu
  2015-12-07  7:24 ` [ruby-core:71883] " ko1
  2 siblings, 0 replies; 3+ messages in thread
From: akr @ 2015-11-29 16:24 UTC (permalink / raw)
  To: ruby-core

Issue #11750 has been reported by Akira Tanaka.

----------------------------------------
Bug #11750: SEGV with Enumerator, yield and proc.
https://bugs.ruby-lang.org/issues/11750

* Author: Akira Tanaka
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.3.0dev (2015-11-29 trunk 52789) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
I found SEGV as follows.

```
% cat z.rb 
def f
  Enumerator.new {|y|
    1000000.times {
      yield
      y.yield
    }
  }
end

def g
  x = proc {}
  f(&x)
end

e = g
e.each {}

% ./miniruby z.rb
z.rb:4: [BUG] Segmentation fault at 0x00000000000022
ruby 2.3.0dev (2015-11-29 trunk 52789) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0007 p:0006 s:0018 e:000017 BLOCK  z.rb:4 [FINISH]
c:0006 p:---- s:0016 e:000015 CFUNC  :times
c:0005 p:0010 s:0013 e:000012 BLOCK  z.rb:3 [FINISH]
c:0004 p:---- s:0010 E:0025a0 CFUNC  :each
c:0003 p:---- s:0008 e:000007 CFUNC  :each
c:0002 p:0040 s:0005 E:002288 EVAL   z.rb:16 [FINISH]
c:0001 p:0000 s:0002 E:001250 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
z.rb:16:in `<main>'
z.rb:16:in `each'
z.rb:16:in `each'
z.rb:3:in `block in f'
z.rb:3:in `times'
z.rb:4:in `block (2 levels) in f'

-- Machine register context ------------------------------------------------
 RIP: 0x00007fb4a35f2dd3 RBP: 0x00007ffe47c0e740 RSP: 0x00007ffe47c0e740
 RAX: 0x0000000000000000 RBX: 0x0000000000000001 RCX: 0x00007fb4a4137e70
 RDX: 0x00007ffe47c0f310 RDI: 0x00007fb4a40216f0 RSI: 0x00007fb4a3427e50
  R8: 0x00007fb4a3328071  R9: 0x0000000000000000 R10: 0x00007fb4a3328071
 R11: 0x0000000000000001 R12: 0x00007fb4a344e340 R13: 0x00007ffe47c12b40
 R14: 0x00007fb4a4137da0 R15: 0x00007fb4a3427e50 EFL: 0x0000000000010206

-- C level backtrace information -------------------------------------------
/home/ruby/tst1/ruby/miniruby(rb_print_backtrace+0x19) [0x7fb4a360be2a] vm_dump.c:688
/home/ruby/tst1/ruby/miniruby(rb_vm_bugreport+0xb8) [0x7fb4a360c2b4] vm_dump.c:997
/home/ruby/tst1/ruby/miniruby(rb_bug_context+0x117) [0x7fb4a3491b7b] error.c:420
/home/ruby/tst1/ruby/miniruby(sigsegv+0x5e) [0x7fb4a357234a] signal.c:890
/lib/x86_64-linux-gnu/libpthread.so.0 [0x7fb4a2ffb8d0]
/home/ruby/tst1/ruby/miniruby(block_proc_is_lambda+0x1f) [0x7fb4a35f2dd3] vm_insnhelper.c:2350
/home/ruby/tst1/ruby/miniruby(vm_invoke_block+0xe5) [0x7fb4a35f318c] vm_insnhelper.c:2441
/home/ruby/tst1/ruby/miniruby(vm_exec_core+0x272c) [0x7fb4a35f603c] insns.def:1032
/home/ruby/tst1/ruby/miniruby(vm_exec+0xe4) [0x7fb4a36072e8] vm.c:1621
/home/ruby/tst1/ruby/miniruby(invoke_block+0xd2) [0x7fb4a36052e4] vm.c:900
/home/ruby/tst1/ruby/miniruby(invoke_block_from_c_0+0x1d2) [0x7fb4a360566a] vm.c:950
/home/ruby/tst1/ruby/miniruby(invoke_block_from_c_splattable+0x49) [0x7fb4a3605707] vm.c:967
/home/ruby/tst1/ruby/miniruby(vm_yield+0x50) [0x7fb4a3605853] vm.c:1002
/home/ruby/tst1/ruby/miniruby(rb_yield_0+0x27) [0x7fb4a36012f0] vm_eval.c:1007
/home/ruby/tst1/ruby/miniruby(rb_yield_1+0x1d) [0x7fb4a360130f] vm_eval.c:1013
/home/ruby/tst1/ruby/miniruby(int_dotimes+0x7a) [0x7fb4a34f7283] numeric.c:3953
/home/ruby/tst1/ruby/miniruby(call_cfunc_0+0x29) [0x7fb4a35f07fb] vm_insnhelper.c:1536
/home/ruby/tst1/ruby/miniruby(vm_call_cfunc_with_frame+0x17d) [0x7fb4a35f1270] vm_insnhelper.c:1709
/home/ruby/tst1/ruby/miniruby(vm_call_cfunc+0x93) [0x7fb4a35f1390] vm_insnhelper.c:1804
/home/ruby/tst1/ruby/miniruby(vm_call_method_each_type+0xbb) [0x7fb4a35f2207] vm_insnhelper.c:2091
/home/ruby/tst1/ruby/miniruby(vm_call_method+0x77) [0x7fb4a35f2894] vm_insnhelper.c:2215
/home/ruby/tst1/ruby/miniruby(vm_call_general+0x3b) [0x7fb4a35f2a6a] vm_insnhelper.c:2258
/home/ruby/tst1/ruby/miniruby(vm_exec_core+0x2302) [0x7fb4a35f5c12] insns.def:962
/home/ruby/tst1/ruby/miniruby(vm_exec+0xe4) [0x7fb4a36072e8] vm.c:1621
/home/ruby/tst1/ruby/miniruby(invoke_block+0xd2) [0x7fb4a36052e4] vm.c:900
/home/ruby/tst1/ruby/miniruby(invoke_block_from_c_0+0x1d2) [0x7fb4a360566a] vm.c:950
/home/ruby/tst1/ruby/miniruby(invoke_block_from_c_unsplattable+0x49) [0x7fb4a3605756] vm.c:975
/home/ruby/tst1/ruby/miniruby(vm_invoke_proc+0x147) [0x7fb4a36059fb] vm.c:1023
/home/ruby/tst1/ruby/miniruby(rb_vm_invoke_proc+0x7e) [0x7fb4a3605b2c] vm.c:1051
/home/ruby/tst1/ruby/miniruby(rb_proc_call+0x61) [0x7fb4a349f6a7] proc.c:815
/home/ruby/tst1/ruby/miniruby(generator_each+0x83) [0x7fb4a348dd75] enumerator.c:1292
/home/ruby/tst1/ruby/miniruby(call_cfunc_m1+0x2f) [0x7fb4a35f07d0] vm_insnhelper.c:1530
/home/ruby/tst1/ruby/miniruby(vm_call0_cfunc_with_frame+0x16f) [0x7fb4a35ff1cf] vm_eval.c:131
/home/ruby/tst1/ruby/miniruby(vm_call0_cfunc+0x3b) [0x7fb4a35ff2a5] vm_eval.c:148
/home/ruby/tst1/ruby/miniruby(vm_call0_body+0x19c) [0x7fb4a35ff443] vm_eval.c:186
/home/ruby/tst1/ruby/miniruby(vm_call0+0x8e) [0x7fb4a35ff05e] vm_eval.c:61
/home/ruby/tst1/ruby/miniruby(rb_call0+0xaa) [0x7fb4a35ffa87] vm_eval.c:351
/home/ruby/tst1/ruby/miniruby(rb_call+0x52) [0x7fb4a36005bf] vm_eval.c:634
/home/ruby/tst1/ruby/miniruby(iterate_method+0x40) [0x7fb4a3601a03] vm_eval.c:1218
/home/ruby/tst1/ruby/miniruby(rb_iterate0+0x165) [0x7fb4a3601846] vm_eval.c:1168
/home/ruby/tst1/ruby/miniruby(rb_iterate+0x67) [0x7fb4a36019bc] vm_eval.c:1200
/home/ruby/tst1/ruby/miniruby(rb_block_call+0x58) [0x7fb4a3601a5d] vm_eval.c:1231
/home/ruby/tst1/ruby/miniruby(enumerator_block_call+0xa3) [0x7fb4a348cabd] enumerator.c:431
/home/ruby/tst1/ruby/miniruby(enumerator_each+0xe2) [0x7fb4a348cba1] enumerator.c:490
/home/ruby/tst1/ruby/miniruby(call_cfunc_m1+0x2f) [0x7fb4a35f07d0] vm_insnhelper.c:1530
/home/ruby/tst1/ruby/miniruby(vm_call_cfunc_with_frame+0x17d) [0x7fb4a35f1270] vm_insnhelper.c:1709
/home/ruby/tst1/ruby/miniruby(vm_call_cfunc+0x93) [0x7fb4a35f1390] vm_insnhelper.c:1804
/home/ruby/tst1/ruby/miniruby(vm_call_method_each_type+0xbb) [0x7fb4a35f2207] vm_insnhelper.c:2091
/home/ruby/tst1/ruby/miniruby(vm_call_method+0x77) [0x7fb4a35f2894] vm_insnhelper.c:2215
/home/ruby/tst1/ruby/miniruby(vm_call_general+0x3b) [0x7fb4a35f2a6a] vm_insnhelper.c:2258
/home/ruby/tst1/ruby/miniruby(vm_exec_core+0x2302) [0x7fb4a35f5c12] insns.def:962
/home/ruby/tst1/ruby/miniruby(vm_exec+0xe4) [0x7fb4a36072e8] vm.c:1621
/home/ruby/tst1/ruby/miniruby(rb_iseq_eval_main+0x36) [0x7fb4a3607f27] vm.c:1863
/home/ruby/tst1/ruby/miniruby(ruby_exec_internal+0x138) [0x7fb4a3497ff0] eval.c:244
/home/ruby/tst1/ruby/miniruby(ruby_exec_node+0x24) [0x7fb4a3498119] eval.c:309
/home/ruby/tst1/ruby/miniruby(ruby_run_node+0x3e) [0x7fb4a34980ec] eval.c:301
/home/ruby/tst1/ruby/miniruby(main+0x71) [0x7fb4a344e4e1] main.c:36

-- Other runtime information -----------------------------------------------

* Loaded script: z.rb

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so

* Process memory map:

7fb4a1928000-7fb4a1acf000 r--s 00000000 fe:01 12714517                   /lib/x86_64-linux-gnu/libc-2.19.so
7fb4a1acf000-7fb4a206e000 r--s 00000000 fe:01 11815059                   /home/ruby/tst1/ruby/miniruby
7fb4a206e000-7fb4a2084000 r-xp 00000000 fe:01 12713988                   /lib/x86_64-linux-gnu/libgcc_s.so.1
7fb4a2084000-7fb4a2283000 ---p 00016000 fe:01 12713988                   /lib/x86_64-linux-gnu/libgcc_s.so.1
7fb4a2283000-7fb4a2284000 rw-p 00015000 fe:01 12713988                   /lib/x86_64-linux-gnu/libgcc_s.so.1
7fb4a2284000-7fb4a2423000 r-xp 00000000 fe:01 12714517                   /lib/x86_64-linux-gnu/libc-2.19.so
7fb4a2423000-7fb4a2623000 ---p 0019f000 fe:01 12714517                   /lib/x86_64-linux-gnu/libc-2.19.so
7fb4a2623000-7fb4a2627000 r--p 0019f000 fe:01 12714517                   /lib/x86_64-linux-gnu/libc-2.19.so
7fb4a2627000-7fb4a2629000 rw-p 001a3000 fe:01 12714517                   /lib/x86_64-linux-gnu/libc-2.19.so
7fb4a2629000-7fb4a262d000 rw-p 00000000 00:00 0 
7fb4a262d000-7fb4a272d000 r-xp 00000000 fe:01 12716931                   /lib/x86_64-linux-gnu/libm-2.19.so
7fb4a272d000-7fb4a292c000 ---p 00100000 fe:01 12716931                   /lib/x86_64-linux-gnu/libm-2.19.so
7fb4a292c000-7fb4a292d000 r--p 000ff000 fe:01 12716931                   /lib/x86_64-linux-gnu/libm-2.19.so
7fb4a292d000-7fb4a292e000 rw-p 00100000 fe:01 12716931                   /lib/x86_64-linux-gnu/libm-2.19.so
7fb4a292e000-7fb4a2936000 r-xp 00000000 fe:01 12716929                   /lib/x86_64-linux-gnu/libcrypt-2.19.so
7fb4a2936000-7fb4a2b35000 ---p 00008000 fe:01 12716929                   /lib/x86_64-linux-gnu/libcrypt-2.19.so
7fb4a2b35000-7fb4a2b36000 r--p 00007000 fe:01 12716929                   /lib/x86_64-linux-gnu/libcrypt-2.19.so
7fb4a2b36000-7fb4a2b37000 rw-p 00008000 fe:01 12716929                   /lib/x86_64-linux-gnu/libcrypt-2.19.so
7fb4a2b37000-7fb4a2b65000 rw-p 00000000 00:00 0 
7fb4a2b65000-7fb4a2b68000 r-xp 00000000 fe:01 12716930                   /lib/x86_64-linux-gnu/libdl-2.19.so
7fb4a2b68000-7fb4a2d67000 ---p 00003000 fe:01 12716930                   /lib/x86_64-linux-gnu/libdl-2.19.so
7fb4a2d67000-7fb4a2d68000 r--p 00002000 fe:01 12716930                   /lib/x86_64-linux-gnu/libdl-2.19.so
7fb4a2d68000-7fb4a2d69000 rw-p 00003000 fe:01 12716930                   /lib/x86_64-linux-gnu/libdl-2.19.so
7fb4a2d69000-7fb4a2dea000 r-xp 00000000 fe:01 20582598                   /usr/lib/x86_64-linux-gnu/libgmp.so.10.2.0
7fb4a2dea000-7fb4a2fea000 ---p 00081000 fe:01 20582598                   /usr/lib/x86_64-linux-gnu/libgmp.so.10.2.0
7fb4a2fea000-7fb4a2feb000 r--p 00081000 fe:01 20582598                   /usr/lib/x86_64-linux-gnu/libgmp.so.10.2.0
7fb4a2feb000-7fb4a2fec000 rw-p 00082000 fe:01 20582598                   /usr/lib/x86_64-linux-gnu/libgmp.so.10.2.0
7fb4a2fec000-7fb4a3004000 r-xp 00000000 fe:01 12714181                   /lib/x86_64-linux-gnu/libpthread-2.19.so
7fb4a3004000-7fb4a3203000 ---p 00018000 fe:01 12714181                   /lib/x86_64-linux-gnu/libpthread-2.19.so
7fb4a3203000-7fb4a3204000 r--p 00017000 fe:01 12714181                   /lib/x86_64-linux-gnu/libpthread-2.19.so
7fb4a3204000-7fb4a3205000 rw-p 00018000 fe:01 12714181                   /lib/x86_64-linux-gnu/libpthread-2.19.so
7fb4a3205000-7fb4a3209000 rw-p 00000000 00:00 0 
7fb4a3209000-7fb4a3229000 r-xp 00000000 fe:01 12714183                   /lib/x86_64-linux-gnu/ld-2.19.so
7fb4a3328000-7fb4a3429000 rw-p 00000000 00:00 0 
7fb4a3429000-7fb4a342a000 r--p 00020000 fe:01 12714183                   /lib/x86_64-linux-gnu/ld-2.19.so
7fb4a342a000-7fb4a342b000 rw-p 00021000 fe:01 12714183                   /lib/x86_64-linux-gnu/ld-2.19.so
7fb4a342b000-7fb4a342c000 rw-p 00000000 00:00 0 
7fb4a342c000-7fb4a36f5000 r-xp 00000000 fe:01 11815059                   /home/ruby/tst1/ruby/miniruby
7fb4a3703000-7fb4a37a7000 r--s 00000000 fe:01 20712003                   /usr/lib/debug/lib/x86_64-linux-gnu/libpthread-2.19.so
7fb4a37a7000-7fb4a37c9000 r--s 00000000 fe:01 12714181                   /lib/x86_64-linux-gnu/libpthread-2.19.so
7fb4a37c9000-7fb4a38d1000 r--p 00000000 fe:01 20583470                   /usr/lib/locale/locale-archive
7fb4a38d1000-7fb4a38d6000 rw-p 00000000 00:00 0 
7fb4a38ed000-7fb4a38ee000 rw-p 00000000 00:00 0 
7fb4a38ee000-7fb4a38ef000 ---p 00000000 00:00 0 
7fb4a38ef000-7fb4a38f4000 rw-p 00000000 00:00 0                          [stack:6787]
7fb4a38f4000-7fb4a38fa000 rw-p 002c8000 fe:01 11815059                   /home/ruby/tst1/ruby/miniruby
7fb4a38fa000-7fb4a390d000 rw-p 00000000 00:00 0 
7fb4a3ff6000-7fb4a413f000 rw-p 00000000 00:00 0                          [heap]
7ffe47416000-7ffe47c15000 rw-p 00000000 00:00 0 
7ffe47d67000-7ffe47d69000 r-xp 00000000 00:00 0                          [vdso]
7ffe47d69000-7ffe47d6b000 r--p 00000000 00:00 0                          [vvar]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]


[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

```




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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ruby-core:71745] [Ruby trunk - Bug #11750] SEGV with Enumerator, yield and proc.
       [not found] <redmine.issue-11750.20151129162428@ruby-lang.org>
  2015-11-29 16:24 ` [ruby-core:71737] [Ruby trunk - Bug #11750] [Open] SEGV with Enumerator, yield and proc akr
@ 2015-11-30  5:36 ` nobu
  2015-12-07  7:24 ` [ruby-core:71883] " ko1
  2 siblings, 0 replies; 3+ messages in thread
From: nobu @ 2015-11-30  5:36 UTC (permalink / raw)
  To: ruby-core

Issue #11750 has been updated by Nobuyoshi Nakada.

File bug-11750.log added
Description updated

By bisecting, it raises `SytemStackError` or segfaults since r51243.

~~~
* vm_core.h: remove blockprocval field from rb_proc_t and rb_binding_t.
  Instead of this field, mark given block in Proc at rb_env_t::env.
~~~

`Enumerator`, `Generator`, or `Yielder` may need more marking or write-barrier.

----------------------------------------
Bug #11750: SEGV with Enumerator, yield and proc.
https://bugs.ruby-lang.org/issues/11750#change-55148

* Author: Akira Tanaka
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.3.0dev (2015-11-29 trunk 52789) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
I found SEGV as follows.

```
% cat z.rb 
def f
  Enumerator.new {|y|
    1000000.times {
      yield
      y.yield
    }
  }
end

def g
  x = proc {}
  f(&x)
end

e = g
e.each {}

% ./miniruby z.rb
(snip)
```


---Files--------------------------------
bug-11750.log (11.2 KB)


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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ruby-core:71883] [Ruby trunk - Bug #11750] SEGV with Enumerator, yield and proc.
       [not found] <redmine.issue-11750.20151129162428@ruby-lang.org>
  2015-11-29 16:24 ` [ruby-core:71737] [Ruby trunk - Bug #11750] [Open] SEGV with Enumerator, yield and proc akr
  2015-11-30  5:36 ` [ruby-core:71745] [Ruby trunk - Bug #11750] " nobu
@ 2015-12-07  7:24 ` ko1
  2 siblings, 0 replies; 3+ messages in thread
From: ko1 @ 2015-12-07  7:24 UTC (permalink / raw)
  To: ruby-core

Issue #11750 has been updated by Koichi Sasada.

Assignee set to Koichi Sasada

----------------------------------------
Bug #11750: SEGV with Enumerator, yield and proc.
https://bugs.ruby-lang.org/issues/11750#change-55287

* Author: Akira Tanaka
* Status: Open
* Priority: Normal
* Assignee: Koichi Sasada
* ruby -v: ruby 2.3.0dev (2015-11-29 trunk 52789) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
I found SEGV as follows.

```
% cat z.rb 
def f
  Enumerator.new {|y|
    1000000.times {
      yield
      y.yield
    }
  }
end

def g
  x = proc {}
  f(&x)
end

e = g
e.each {}

% ./miniruby z.rb
(snip)
```


---Files--------------------------------
bug-11750.log (11.2 KB)


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

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-12-07  6:53 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <redmine.issue-11750.20151129162428@ruby-lang.org>
2015-11-29 16:24 ` [ruby-core:71737] [Ruby trunk - Bug #11750] [Open] SEGV with Enumerator, yield and proc akr
2015-11-30  5:36 ` [ruby-core:71745] [Ruby trunk - Bug #11750] " nobu
2015-12-07  7:24 ` [ruby-core:71883] " ko1

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).