diff options
author | Andrew Gallant <jamslam@gmail.com> | 2016-11-09 16:45:21 -0500 |
---|---|---|
committer | Andrew Gallant <jamslam@gmail.com> | 2016-11-09 16:45:23 -0500 |
commit | 2dce0dc0df3c9ade3d89dd1ed673213d76760509 (patch) | |
tree | 5cad9fb9e824ac9858aea30ad3c7f3f2fd2e3678 /tests | |
parent | 2e5c3c05e822d55f3752fc0f1765f128a5e3b4e1 (diff) |
Fix a bug with handling --ignore-file.
Namely, passing a directory to --ignore-file caused ripgrep to allocate
memory without bound.
The issue was that I got a bit overzealous with partial error
reporting. Namely, when processing a gitignore file, we should try
to use every pattern even if some patterns are invalid globs (e.g.,
a**b). In the process, I applied the same logic to I/O errors. In this
case, it manifest by attempting to read lines from a directory, which
appears to yield Results forever, where each Result is an error of the
form "you can't read from a directory silly." Since I treated it as a
partial error, ripgrep was just spinning and accruing each error in
memory, which caused the OOM killer to kick in.
Fixes #228
Diffstat (limited to 'tests')
-rw-r--r-- | tests/tests.rs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/tests/tests.rs b/tests/tests.rs index 59cefb59..5c5546d3 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -893,6 +893,13 @@ clean!(regression_206, "test", ".", |wd: WorkDir, mut cmd: Command| { assert_eq!(lines, format!("{}:test\n", path("foo/bar.txt"))); }); +// See: https://github.com/BurntSushi/ripgrep/issues/228 +clean!(regression_228, "test", ".", |wd: WorkDir, mut cmd: Command| { + wd.create_dir("foo"); + cmd.arg("--ignore-file").arg("foo"); + wd.assert_err(&mut cmd); +}); + // See: https://github.com/BurntSushi/ripgrep/issues/20 sherlock!(feature_20_no_filename, "Sherlock", ".", |wd: WorkDir, mut cmd: Command| { |