summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Gallant <jamslam@gmail.com>2019-04-14 16:46:59 -0400
committerAndrew Gallant <jamslam@gmail.com>2019-04-14 19:29:27 -0400
commit8f14cb18a5aed4556e1b0c022dd189e188ca02fa (patch)
treed93e2fa419d9f5cd72af1b430eeea475e95a7fe2
parentda9d7204315164e3740099aac4a4b88fb743e4d5 (diff)
ripgrep: increase pcre2's default JIT stack size
The default stack size is 32KB, and this increases it to 10MB. 32KB is pretty paltry in the environments in which ripgrep runs, and 10MB is easily afforded as a maximum size. (The size limit we set for Rust's regex engine is considerably larger.) This was motivated due to the fack that JIT stack limits have been observed to be hit in the wild: https://github.com/Microsoft/vscode/issues/64606
-rw-r--r--CHANGELOG.md1
-rw-r--r--src/args.rs7
2 files changed, 7 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index aab281f7..f36245f3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -91,6 +91,7 @@ Bug fixes:
Fix bug where `-F`/`-x` weren't applied to patterns given via `-f`.
* [BUG #1189](https://github.com/BurntSushi/ripgrep/issues/1189):
Document cases where ripgrep may use a lot of memory.
+* BUG: Increase the default stack size for PCRE2's JIT.
0.10.0 (2018-09-07)
diff --git a/src/args.rs b/src/args.rs
index 414bf815..389de1dd 100644
--- a/src/args.rs
+++ b/src/args.rs
@@ -693,8 +693,13 @@ impl ArgMatches {
.word(self.is_present("word-regexp"));
// For whatever reason, the JIT craps out during regex compilation with
// a "no more memory" error on 32 bit systems. So don't use it there.
- builder.jit_if_available(true);
if cfg!(target_pointer_width = "64") {
+ builder
+ .jit_if_available(true)
+ // The PCRE2 docs say that 32KB is the default, and that 1MB
+ // should be big enough for anything. But let's crank it to
+ // 10MB.
+ .max_jit_stack_size(Some(10 * (1<<20)));
}
if self.pcre2_unicode() {
builder.utf(true).ucp(true);