2021/07/18 今週の気になった bugs.ruby のチケット
今週は TracePoint 周りのバグがありました。
[Feature #17039] Remove Time#succ
Time#succ
を削除するチケット- 1.9.2 の頃から廃止の警告がでてたらしい
warning: Time#succ is obsolete; use time + 1
- と、いうわけで Ruby 3.1 から削除されるので使ってる場合は注意
[Bug #17945] Date::Infinity comparison <=> with Float::INFINITY not symmetric
Date::Infinity <=> Float::INFINITY
が対称でないというバグ報告
require 'date' p Float::INFINITY <=> Date::Infinity.new # => 0 p Date::Infinity.new <=> Float::INFINITY # => 1
- これは最新版では修正済み
- 両方共
0
を返す - https://github.com/ruby/date/pull/34
- 両方共
[Bug #18031] Nested TracePoint#enable with target crashes
- 以下のように
TracePoint
がネストしているとクラッシュするというバグ報告- どうして…
one = TracePoint.new(:call) {} two = TracePoint.new(:call) {} obj = Object.new obj.define_singleton_method(:foo) {} # a bmethod foo = obj.method(:foo) # ここでクラッシュする one.enable(target: foo) do two.enable(target: foo) {} end
- 修正 PR は既にあるぽい
- これとは別に2つの問題もあるらしい
- 1つは特定のコードでメモリリークする
# コード例 loop do tp = TracePoint.new(:call){} tp.enable tp.disable end
- もう1つは複数の
TracePoint
を使うと2つ目のTracePoint
が1つ目のTracePoint
を上書きするらしい
[PR #4638] Fix infinite loop when b_return TracePoint throws
- 次のように
TracePoint
のb_return
内で例外が発生すると無限ループになるバグの修正スクリプト- どうして…どうして…
class Foo define_singleton_method(:foo) { return } end TracePoint.trace(:b_return) do |tp| p tp raise end Foo.foo
- 6日前に PR が立ってるけど特に進展がなさそう