2021/08/19 今週の気になった bugs.ruby のチケット
今週は右代入で特定のケースでシンタックスエラーになるというバグ報告がありました。
[Bug #18084] JSON.dump
can crash VM.
require 'json' x = {} # 自身に自身を割り当てる x[:x] = x # machine stack overflow in critical region (fatal) p JSON.dump(x)
require 'json' x = {} x[:x] = x # Ruby 2.6 の場合 # error: stack level too deep (SystemStackError) p JSON.dump(x)
- これが期待する動作なのかどうか、という旨がチケットに書かれていたが最新版では
SystemStackError
になるように修正された
[Bug #18080] Syntax error on one-line pattern matching
- 次のようにカッコで囲まれていないパラメータを持つメソッドの戻り値を右代入で使用するとシンタックスエラーになる、というバグ報告
# パラメータがなかったり、カッコが付いている場合は OK p do end => a p a #=> nil p(1) do end => a p a #=> 1 # カッコがないパラメータがある場合はシンタックスエラーになる p 1 do end => a #=> # syntax error, unexpected =>, expecting end-of-input # end => a # ^~ # これは1行 in でも同様にシンタックスエラーになる p 1 do end in a #=> # syntax error, unexpected `in', expecting end-of-input # end in a # ^~
- このエラーは意図的ではないが修正するのは難しいらしい