BUG: regex: fix pcre compile error when using JIT
According to "man pcreapi", pcre_compile() does not accept being passed
a NULL pointer in errptr or erroffset. It immediately returns NULL, causing
any expression to fail. So let's pass real variables and make use of them
to improve error reporting.
diff --git a/src/acl.c b/src/acl.c
index 6a23bae..05bb1a5 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -544,6 +544,10 @@
{
regex *preg;
int icase;
+#ifdef USE_PCRE_JIT
+ const char *error;
+ int erroffset;
+#endif
preg = calloc(1, sizeof(*preg));
@@ -554,19 +558,19 @@
#ifdef USE_PCRE_JIT
icase = (pattern->flags & ACL_PAT_F_IGNORE_CASE) ? PCRE_CASELESS : 0;
- preg->reg = pcre_compile(*text, PCRE_NO_AUTO_CAPTURE | icase, NULL, NULL,
+ preg->reg = pcre_compile(*text, PCRE_NO_AUTO_CAPTURE | icase, &error, &erroffset,
NULL);
if (!preg->reg) {
free(preg);
- memprintf(err, "regex '%s' is invalid", *text);
+ memprintf(err, "regex '%s' is invalid (error=%s, erroffset=%d)", *text, error, erroffset);
return 0;
}
- preg->extra = pcre_study(preg->reg, PCRE_STUDY_JIT_COMPILE, NULL);
+ preg->extra = pcre_study(preg->reg, PCRE_STUDY_JIT_COMPILE, &error);
if (!preg->extra) {
pcre_free(preg->reg);
free(preg);
- memprintf(err, "failed to compile regex '%s'", *text);
+ memprintf(err, "failed to compile regex '%s' (error=%s)", *text, error);
return 0;
}
#else