From 6439a03db98dfbaba705ca3743b64b775122837c Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Fri, 25 Sep 2020 22:35:29 +0200 Subject: [PATCH] pcrs: Use the D flag to disable JIT-compilation ... and use it in pcrs_compile_dynamic_command(). --- pcrs.c | 12 ++++++++---- pcrs.h | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pcrs.c b/pcrs.c index 67b7b356..ca6ba680 100644 --- a/pcrs.c +++ b/pcrs.c @@ -168,6 +168,7 @@ static int pcrs_parse_perl_options(const char *optstring, int *flags) case 'o': break; case 's': rc |= PCRE_DOTALL; break; case 'x': rc |= PCRE_EXTENDED; break; + case 'D': *flags |= PCRS_DYNAMIC; break; case 'U': rc |= PCRE_UNGREEDY; break; case 'T': *flags |= PCRS_TRIVIAL; break; default: break; @@ -669,7 +670,10 @@ pcrs_job *pcrs_compile(const char *pattern, const char *substitute, const char * #ifdef PCRE_STUDY_JIT_COMPILE - pcre_study_options = PCRE_STUDY_JIT_COMPILE; + if (!(flags & PCRS_DYNAMIC)) + { + pcre_study_options = PCRE_STUDY_JIT_COMPILE; + } #endif /* @@ -1174,7 +1178,7 @@ pcrs_job *pcrs_compile_dynamic_command(char *pcrs_command, const struct pcrs_var */ assert(NULL == strchr(v->name, d)); - ret = snprintf(buf, sizeof(buf), "s%c\\$%s%c%s%cgT", d, v->name, d, v->value, d); + ret = snprintf(buf, sizeof(buf), "s%c\\$%s%c%s%cDgT", d, v->name, d, v->value, d); assert(ret >= 0); if (ret >= sizeof(buf)) { @@ -1185,10 +1189,10 @@ pcrs_job *pcrs_compile_dynamic_command(char *pcrs_command, const struct pcrs_var * properly. */ static const char warning[] = "... [too long, truncated]"; - const size_t trailer_size = sizeof(warning) + 3; /* 3 for d + "gT" */ + const size_t trailer_size = sizeof(warning) + 4; /* 4 for d + "DgT" */ char *trailer_start = buf + sizeof(buf) - trailer_size; - ret = snprintf(trailer_start, trailer_size, "%s%cgT", warning, d); + ret = snprintf(trailer_start, trailer_size, "%s%cDgT", warning, d); assert(ret == trailer_size - 1); assert(sizeof(buf) == strlen(buf) + 1); truncation = 1; diff --git a/pcrs.h b/pcrs.h index e7699ab9..abff3caa 100644 --- a/pcrs.h +++ b/pcrs.h @@ -70,6 +70,7 @@ #define PCRS_GLOBAL 1 /* Job should be applied globally, as with perl's g option */ #define PCRS_TRIVIAL 2 /* Backreferences in the substitute are ignored */ #define PCRS_SUCCESS 4 /* Job did previously match */ +#define PCRS_DYNAMIC 8 /* Job is dynamic (used to disable JIT compilation) */ /* -- 2.39.2