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

[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
# コード例
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

  • 次のように TracePointb_return 内で例外が発生すると無限ループになるバグの修正スクリプト
    • どうして…どうして…
class Foo
  define_singleton_method(:foo) { return }
end

TracePoint.trace(:b_return) do |tp|
  p tp
  raise
end

Foo.foo
  • 6日前に PR が立ってるけど特に進展がなさそう