GNU grep 2.20 リリース

6/3にGNU grep 2.20がリリースされました。

GNU grep 2.20 は、GNU grep 2.19 で行われた多くのパフォーマンス改善に対するメンテナンス・リリースです。結果不正の不具合が見つかったため、GNU grep 2.19のリリースから、たった11日後にリリースされる運びとなりました。

それでは、GNU grep 2.20 で修正された主な不具合の内容について、例をあげながら見て行くことにしましょう。

bug#17617 - bug / regression in grep-2.19

GNU grep 2.19 において、メモリ割り当ての最適化が行われましたが、その際に混入してしまった不具合です。

下記のケースでは、どちらも行を出力すべきではありませんが、GNU grep 2.19 では、どちらも「aa」を出力してしまいます。*1

$ echo aa | grep 'a\(b$\|c$\)'
aa
$ echo aa | grep '\(b$\|c$\)a'
aa

bug#17640 - grep with -m reads the entire input

-m オプションを指定されると、 個のマッチを見つけた時点で処理を打ち切るのが仕様上の動作です。

下記のケースでは、「x」 を出力して直ちに正常終了すべきですが、GNU grep 2.19 では、「x」を出力した後に直ちに終了せず、入力の末尾まで読み込もうとしてしまいます。その結果、Ctrl+Cなどで処理を停止させない限りプロンプトが返りません。

$ yes x | grep -m1 x

*1:GNU grep 2.18 以前のリリースには、この不具合はありません。