From: "Carlo Marcelo Arenas Belón" <carenas@gmail.com>
To: git@vger.kernel.org
Cc: Johannes.Schindelin@gmx.de, avarab@gmail.com, gitster@pobox.com,
l.s.r@web.de
Subject: [RFC PATCH v3] grep: treat PCRE2 jit compilation memory error as non fatal
Date: Sat, 3 Aug 2019 20:14:09 -0700 [thread overview]
Message-ID: <20190804031409.32764-1-carenas@gmail.com> (raw)
In-Reply-To: <20190729105955.44390-1-carenas@gmail.com>
94da9193a6 (grep: add support for PCRE v2, 2017-06-01) uses the
JIT fast path unless JIT support has not been compiled in the
linked library.
Starting from 10.23 of PCRE2, pcre2grep ignores any errors from
pcre2_jit_cpmpile as a workaround for their bug1749[1] and we
should do too, so that the interpreter could be used as a fallback
in cases where JIT was not available because of a security policy.
To be conservative, we are restricting initially the error to the
known error that would be returned in that case (and to be documented
as such in a future release of PCRE) and printing a warning so that
corrective action could be taken.
[1] https://bugs.exim.org/show_bug.cgi?id=1749
Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
---
grep.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/grep.c b/grep.c
index f7c3a5803e..593a1cb7a0 100644
--- a/grep.c
+++ b/grep.c
@@ -525,7 +525,13 @@ static void compile_pcre2_pattern(struct grep_pat *p, const struct grep_opt *opt
if (p->pcre2_jit_on == 1) {
jitret = pcre2_jit_compile(p->pcre2_pattern, PCRE2_JIT_COMPLETE);
if (jitret)
- die("Couldn't JIT the PCRE2 pattern '%s', got '%d'\n", p->pattern, jitret);
+ if (jitret == PCRE2_ERROR_NOMEMORY) {
+ warning("JIT couldn't be used in PCRE2");
+ p->pcre2_jit_on = 0;
+ return;
+ }
+ else
+ die("Couldn't JIT the PCRE2 pattern '%s', got '%d'\n", p->pattern, jitret);
/*
* The pcre2_config(PCRE2_CONFIG_JIT, ...) call just
--
2.23.0.rc1
next prev parent reply other threads:[~2019-08-04 3:14 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-28 23:54 [RFC PATCH] grep: allow for run time disabling of JIT in PCRE Carlo Marcelo Arenas Belón
2019-07-29 0:09 ` Carlo Arenas
2019-07-29 4:57 ` Junio C Hamano
2019-07-29 5:29 ` Carlo Arenas
2019-07-29 8:55 ` Ævar Arnfjörð Bjarmason
2019-07-29 10:26 ` Carlo Arenas
2019-07-29 12:38 ` Ævar Arnfjörð Bjarmason
2019-07-30 13:01 ` Carlo Arenas
2019-07-29 10:59 ` [RFC PATCH v2] " Carlo Marcelo Arenas Belón
2019-07-29 11:33 ` Carlo Arenas
2019-07-29 15:11 ` René Scharfe
2019-07-29 17:47 ` Junio C Hamano
2019-07-30 0:49 ` Carlo Arenas
2019-07-30 17:55 ` René Scharfe
2019-07-31 12:36 ` Johannes Schindelin
2019-07-31 16:18 ` Junio C Hamano
2019-07-31 12:32 ` Johannes Schindelin
2019-07-31 14:57 ` Ævar Arnfjörð Bjarmason
2019-08-04 0:25 ` Carlo Arenas
2019-08-04 3:14 ` Carlo Marcelo Arenas Belón [this message]
2019-08-04 7:43 ` [RFC PATCH v3] grep: treat PCRE2 jit compilation memory error as non fatal Carlo Arenas
2019-08-05 20:16 ` Junio C Hamano
2019-07-31 12:24 ` [RFC PATCH] grep: allow for run time disabling of JIT in PCRE Johannes Schindelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190804031409.32764-1-carenas@gmail.com \
--to=carenas@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=l.s.r@web.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.