[ruby-trunk - Bug #10689] [Open] `unexpected break' occurs when TracePoint#binding is called

Issue #10689 has been reported by Kazuki Tsujimoto.


Bug #10689: `unexpected break’ occurs when TracePoint#binding is called

  • Author: Kazuki Tsujimoto
  • Status: Open
  • Priority: Normal
  • Assignee:
  • Category: core
  • Target version:
  • ruby -v: ruby 2.3.0dev (2015-01-02 trunk 49102) [x86_64-linux]
  • Backport: 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED

以下のコードでunexpected breakになります。

class Bug
  include Enumerable

  def each
    [0].each do
      yield
    end
  end
end

TracePoint.trace(:c_return) do |tp|
  tp.binding
end

Bug.new.all? { false }

all?中のrb_iter_breakによってth->errinfoがセットされた後に、
TracePoint#binding呼び出しによってcfpのepがヒープを指すようになってしまうのが原因です。

とりあえずTracePoint呼び出し後にth->errinfoのepを書き換えるようにしてみたパッチを添付します。

—Files--------------------------------
fix-unexpected-break.patch (3.32 KB)