2017-08-28 16 views
1

segfaultコマンドは、テキストを含むファイルがあるディレクトリで実行する必要があります。 TheまたはGroupがなければ、seg-faultは発生しません。次のgrepコマンドsegfaultはなぜですか:grep -Pz "(。| n)*" *

+0

manページによれば、 'grep -P'は"高度に実験的 "なので、YMMVはあなた自身の責任において使用します。私は個人的には疫病のようにそれを避けるだろうが、著者からの明確な警告が与えられているが、私は他の人たちがそれを主張しているのを見る... –

+0

期間や "行終止符を除くすべての文字列"私の前提は、文の終わりにある改行または改行にマッチしようとしているということです。あなたの正規表現の例では、ピリオドは基本的にすべてのものにマッチします。ピリオドとテキストをマッチさせるには、バックスラッシュでエスケープする必要があります。 – user3661841

+0

あなたの_grep_は本当にウイルスです。 – sln

答えて

0

バグがそれでありますので、なぜ、次のgrepコマンドは

をセグメンテーションフォールトありません。ユーザーのユーティリティで

どれクラッシュ、などgrepcpls、などが述べユーティリティでバグあり、そしてあなたはそれを再現するために必要な最小限の一連のステップでそれを報告する必要があります。

0

libpcre2でコンパイルされた "git grep"は時々segfaultをトリガーしました。
Git 2.16(2018年第1四半期)ではこれが修正されています。

commit a25b908,commit ce9a257(20111年11月23日)、Ævar Arnfjörð Bjarmason (avar)を参照してください。 (commit b3f04e5Junio C Hamano -- gitster --によって合併2017年12月13日)

grep:JIT(最も一般的なランタイム構成)の下PCRE2パターンのコンパイルのバグを修正し-P + PCRE2 <=10.30 + (*NO_JIT)

下セグメンテーション違反を修正します。 (*NO_JIT)動詞を持つ任意のパターンは、任意の現在リリースされPCRE2バージョンで セグメンテーション違反になります。これはPCRE2自体のバグだったsegfaultedこと

$ git grep -P '(*NO_JIT)hi.*there' 
    Segmentation fault 

は、pcre-dev上で(「How am I supposed to use PCRE2 JIT in the face of (*NO_JIT) ?」)を報告した後、それはまだで修正されていますリリース予定のPCRE(おそらく最初に10.31としてリリースされた)。
今ではで死ぬだろう:

$ git grep -P '(*NO_JIT)hi.*there' 
    fatal: pcre2_jit_match failed with error code -45: bad JIT option 

しかし、バグの原因は、戻って私の 94da919(」grep:PCRE v2" のサポートの追加にまで遡る私たち自身のコードであり、2017年6月1日に、 Git 2.14-rc0)。

としては、それはまた、pcre2_pattern_info()だけJITが 使用する必要があるかどうかを確認するためにpcre2_config()をチェックするのに十分 ない頼まなければならないが、ここに追加されたコメントで、より長さで説明しました。

これはPCRE2で回り込んだときに私が気付いたものです 動詞のパターンがgitに渡されました。 PCRE2の動詞 を(* NO_JIT) という相対的な不明瞭さと一緒にライブラリに渡すことのあいまいさを考えると、git のユーザーはこれを遭遇したとは思わない。まったく同じバグではないかもしれませんが、あなたはGitの2.16たらもう一度git grepをテスト検討するかもしれない

再び

は、問題が解決しないかどうかを確認するために、リリースです。

関連する問題