猫';中非常奇怪的grep2.5.1 bug;读长线

猫';中非常奇怪的grep2.5.1 bug;读长线,grep,Grep,最近,我和一位同行在GNU grep 2.5.1中发现了一个有趣的bug,其中行数超过200000000个字符的标准输入导致grep失败,即使该模式不在其中一个长行中。但是,如果grep使用grep match file读取文件,则工作正常。看起来这个错误在2.5.3中已经修复了 cat big_file | grep pattern # this dies with an exit code 0 after encountering a long line grep pattern big_

最近,我和一位同行在GNU grep 2.5.1中发现了一个有趣的bug,其中行数超过200000000个字符的标准输入导致grep失败,即使该模式不在其中一个长行中。但是,如果grep使用
grep match file
读取文件,则工作正常。看起来这个错误在2.5.3中已经修复了

cat big_file | grep pattern # this dies with an exit code 0 after encountering a long line

grep pattern big_file # works fine! 

有人知道为什么会这样吗?线路限制是真正的原因吗

我正在查看提交,但什么也找不到。你可以试一试


链接到带有2.5.1的页面。从那里来回寻找它。

我在读取很长的行时遇到了或曾经遇到过内存耗尽问题,但在大多数分配200MB的系统上不太可能失败

我相信它在直接读取时使用内存映射文件,显然在从管道读取时这不是一个选项,所以可能这就是区别所在


另外,您的模式有多复杂?grep有一个已知的限制,即带有大量计数的
{n,m}
选项可能会导致分配大量内存。

我也查看了提交(“使用源代码,Luke!”),但也没有发现任何问题。这是不幸的;如果你不能相信你的工具,你能相信什么?第一个例子是无用的使用cat,所以不要使用它。您的问题已解决。cat用作示例,真正的stdin来自脚本。区别在于grep可以将文件映射到内存中,但除了缓冲区标准输入之外,它没有其他选项