Ruby2.7.0からTimeオブジェクトをMarshalizeしたときの挙動が変わっていた
TL;DR
TimeオブジェクトがMarshalizeできない時があるのはバグだったらしい。 こちらのPRで解消されていたので、挙動が変わった。 https://github.com/ruby/ruby/commit/e690df1f1ef4f791295448f9192d6e027400ee72
はじめに
Ruby2.7.0に変えたらMarshalize周りのテストケースが落ちるようになっていたので、詳細を調べました。
version
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux-musl]
からruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-musl]
にアップデートした際に判明。
当該コード
require 'time' Marshal.dump(Time.parse('1890/11/11')) Marshal.dump(Time.parse('70000/11/11'))
これらのパターンはArgumentErrorが出るものとして例外処理をしていたが、Ruby2.7.0からは普通に動くようになっていた。