为什么以下grep命令是segfault:grep -Pz"(。| \ n)*" *

时间:2017-08-28 22:00:04

标签: regex grep segmentation-fault

对于segfault命令,它必须在包含文本的文件的目录中运行。没有或组,它不会出现错误。

2 个答案:

答案 0 :(得分:0)

  

为什么以下grep命令会出现段错误

因为它有一个错误。

用户实用程序中的任何崩溃,例如grepcpls等,都是所述实用程序中的错误,您应该报告它有一套重现它所需的最小步骤。

答案 1 :(得分:0)

它似乎与另一个错误相似:" git grep"使用libpcre2编译有时会触发段错误 使用Git 2.16(2018年第一季度),这是固定的。

commit a25b908,见commit ce9a257Ævar Arnfjörð Bjarmason (avar)(2017年11月23日) (由Junio C Hamano -- gitster --合并于commit b3f04e5,2017年12月13日)

  

grep:修复-P + PCRE2 <=10.30 + (*NO_JIT)

下的段错误      

修复JIT(最常见的运行时配置)下的PCRE2模式编译中的错误。任何带有(*NO_JIT)动词的模式都会   任何当前发布的PCRE2版本中的段错误:

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

这个segfaulted是PCRE2本身的一个错误,在pcre-dev上报告它(&#34; How am I supposed to use PCRE2 JIT in the face of (*NO_JIT) ?&#34;)之后,它已经被修复了-be-release版本的PCRE(可能首先发布为10.31)   现在它会死于:

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

但是这个bug的原因在于我们自己的代码可以追溯到我的   94da919(&#34; grep:添加对PCRE v2&#34;,2017-06-01,Git 2.14-rc0的支持。

     

正如在此处添加的评论中详细解释的那样,它不是   足以只检查pcre2_config()以查看JIT是否应该   使用时,还需要pcre2_pattern_info()

     

这是我在摆弄PCRE2时发现自己的东西   模式中的动词传递给git。我不希望任何git用户   考虑到传递PCRE2动词的默默无闻,我遇到了这个问题   到图书馆,以及相对默默无闻的(* NO_JIT)   本身。

同样,这可能不是完全相同的错误,但您可能会考虑在Git 2.16发布后再次测试git grep,以查看问题是否仍然存在。