git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Suspected git grep regression in git 2.40.0

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 21, 2023, 16:33 UTC
Message-ID
<xmqqttyejc7y.fsf@gitster.g>
In-Reply-To
<7E83DAA1-F9A9-4151-8D07-D80EA6D59EEA@clumio.com>

[jc: on the CC: line, summoned a few people who may know a lot more about pcre than I do]

Stephane Odul <stephane@clumio.com> writes:
Show 18 quoted lines
> We have a CI pipeline on a private repository that started failing
> consistently while running `git grep -P` commands. The command
> fails with an exit code of -11 and is failing pretty
> consistently. With prior versions of git there is no issue
> whatsoever, but with 2.40.0 it always fails on the same
> call. Other git grep calls are fine, but that one is failing
> consistently.
>
> I was not able to reproduce locally but my main machine is an M1
> MacBook Pro, the CI pipeline runs under Kubernetes in AWS and the
> container is based on Ubuntu 20.04 with the git client installed
> via the PPA.
>
> The error is for this pattern `git grep -cP '^\w+ = json.load'`.
>
> As a workaround we tried to download and install the microsoft-git
> v2.39.2 deb package since it allows us to downgrade, but then the
> git grep commands just got stuck.

One "grep -P" related change we had recently between 2.39 and 2.40 was

    50b6ad55 (grep: fall back to interpreter if JIT memory
    allocation fails, 2023-01-31)

The code tries to figure out at runtime if pcre engine has functioning JIT by making an extra JIT compilation of a sample pattern and when it fails with a specific reason, fall back to interpreted pattern matching. The change made the code to emit a bit more detailed information when it fails, but a controlled exit from the codepath should give $?=128, not 11.

So the above commit may or may not be related. It could be that the version of pcre library linked to Git 2.40 and older Git you are running in your CI environment has been updated.

Does it make a difference if you disable JIT by prefixing the pattern with (*NO_JIT)?

Thanks.
Previous: Bagas SanjayaNext: Mathias Krause
Message 3 of 11 in “Suspected git grep regression in git 2.40.0”
  1. Stephane OdulMar 21, 2023
  2. Bagas SanjayaMar 21, 2023
  3. Junio C HamanoMar 21, 2023
  4. Mathias KrauseMar 21, 2023
  5. Stephane OdulMar 21, 2023
  6. Mathias KrauseMar 22, 2023
  7. Stephane OdulMar 22, 2023
  8. Mathias KrauseMar 23, 2023
  9. Junio C HamanoMar 23, 2023
  10. Mathias KrauseMar 23, 2023
  11. grep: work around UTF-8 related JIT bug in PCRE2 <= 10.34Mathias Krause, Mar 23, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.