On Sat, Feb 05, 2022 at 06:00:02PM +0100, René Scharfe wrote: > >> --- >8 --- > >> Subject: [PATCH] grep: disable JIT on PCRE2 before 10.36 to avoid endless loop > >> > >> Commit e0c6029 (Fix inifinite loop when a single byte newline is > >> searched in JIT., 2020-05-29) of PCRE2 adds the following point to its > >> ChangeLog for version 10.36: > >> > >> 2. Fix inifinite loop when a single byte newline is searched in JIT when > >> invalid utf8 mode is enabled. > >> > >> Avoid that bug on older versions (which are still reportedly found in > >> the wild) by disabling the JIT when handling UTF-8. > >> > >> Reported-by: SZEDER Gábor <szeder.dev@xxxxxxxxx> > >> Signed-off-by: René Scharfe <l.s.r@xxxxxx> > >> --- > >> Not sure how to test it. Killing git grep after a second or so seems a > >> bit clumsy. timeout(1) from GNU coreutils at least allows doing that > >> from the shell, but it's not a standard tool. Perhaps we need a new > >> test helper for that purpose? > > https://mywiki.wooledge.org/BashFAQ/068 offers a Perl-based Shell > function or aborting a program if it takes too long: > > doalarm() { perl -e 'alarm shift; exec @ARGV' -- "$@"; } > > It doesn't waste time when the program finishes faster and seems to work > fine with git grep. > > I can't actually test the effectiveness of the patch because PCRE2's > JIT doesn't work on my development machine at all (Apple M1), as I just > discovered. :-/ While we know that disabling JIT helps, we didn't > actually determine, yet, if e0c6029 (Fix inifinite loop when a single > byte newline is searched in JIT., 2020-05-29) really fixes the "^\s" > bug. > > So I have to abandon this patch, unfortunately. Any volunteer to pick > it up? FWIW, I built Git with your patch and USE_LIBPCRE2=YesPlease and run the test suite, and it succeeded. Though I can't judge how much is this actually worth.