BUG/MEDIUM: regex: fix pcre_study error handling
pcre_study() may return NULL even though it succeeded. In this case error is
NULL otherwise error is not NULL. Also see man 3 pcre_study.
Previously a ACL pattern of e.g. ".*" would cause error because pcre_study did
not found anything to speed up matching and returned regex->extra = NULL and
error = NULL which in this case was a false-positive. That happend only when
PCRE_JIT was enabled for HAProxy but libpcre has been built without JIT.
Signed-off-by: Christian Ruppert <c.ruppert@babiel.com>
[wt: this needs to be backported to 1.5 as well]
(cherry picked from commit 955f4613cb457a93bb278e47a9af19bf5479d27d)
diff --git a/src/regex.c b/src/regex.c
index dda666d..c0b23cb 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -290,7 +290,7 @@
#ifdef USE_PCRE_JIT
regex->extra = pcre_study(regex->reg, PCRE_STUDY_JIT_COMPILE, &error);
- if (!regex->extra) {
+ if (!regex->extra && error != NULL) {
pcre_free(regex->reg);
memprintf(err, "failed to compile regex '%s' (error=%s)", str, error);
return 0;