]> granicus.if.org Git - php/commitdiff
Improve diagnostic on PCRE JIT mmap failure
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 4 Oct 2019 14:01:10 +0000 (16:01 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 4 Oct 2019 14:03:38 +0000 (16:03 +0200)
Print a more informative message that indicates that this is
likely a permission issue, and also indicate that pcre.jit=0
can be used to work around it.

Also automatically disable the JIT, so that this message is
only shown once.

See bug #78630.

ext/pcre/php_pcre.c

index a131ecd884e65157cda9bd1a8b4c9c7f16f3a142..59217349b50cb4dfb0b95a61dfd4d85478189ba9 100644 (file)
@@ -783,6 +783,12 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
                        if (!pcre2_pattern_info(re, PCRE2_INFO_JITSIZE, &jit_size) && jit_size > 0) {
                                poptions |= PREG_JIT;
                        }
+               } else if (rc == PCRE2_ERROR_NOMEMORY) {
+                       php_error_docref(NULL, E_WARNING,
+                               "Allocation of JIT memory failed, PCRE JIT will be disabled. "
+                               "This is likely caused by security restrictions. "
+                               "Either grant PHP permission to allocate executable memory, or set pcre.jit=0");
+                       PCRE_G(jit) = 0;
                } else {
                        pcre2_get_error_message(rc, error, sizeof(error));
                        php_error_docref(NULL, E_WARNING, "JIT compilation failed: %s", error);