From: Dmitry Stogov Date: Fri, 25 Apr 2014 04:33:37 +0000 (+0400) Subject: Enable PCRE JIT compiler X-Git-Tag: POST_PHPNG_MERGE~412^2~50 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d0ed1212a454dbbae7ec0327bc4f063e26037a0b;p=php Enable PCRE JIT compiler --- diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c index 60769f1314..983dd6d4fc 100644 --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -117,7 +117,10 @@ static PHP_GSHUTDOWN_FUNCTION(pcre) /* {{{ */ PHP_INI_BEGIN() STD_PHP_INI_ENTRY("pcre.backtrack_limit", "1000000", PHP_INI_ALL, OnUpdateLong, backtrack_limit, zend_pcre_globals, pcre_globals) - STD_PHP_INI_ENTRY("pcre.recursion_limit", "100000", PHP_INI_ALL, OnUpdateLong, recursion_limit, zend_pcre_globals, pcre_globals) + STD_PHP_INI_ENTRY("pcre.recursion_limit", "100000", PHP_INI_ALL, OnUpdateLong, recursion_limit, zend_pcre_globals, pcre_globals) +#ifdef PCRE_STUDY_JIT_COMPILE + STD_PHP_INI_ENTRY("pcre.jit", "1", PHP_INI_ALL, OnUpdateBool, jit, zend_pcre_globals, pcre_globals) +#endif PHP_INI_END() @@ -412,12 +415,22 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex TSRMLS return NULL; } +#ifdef PCRE_STUDY_JIT_COMPILE + if (PCRE_G(jit)) { + /* Enable PCRE JIT compiler */ + do_study = 1; + soptions |= PCRE_STUDY_JIT_COMPILE; + } +#endif + /* If study option was specified, study the pattern and store the result in extra for passing to pcre_exec. */ if (do_study) { extra = pcre_study(re, soptions, &error); if (extra) { extra->flags |= PCRE_EXTRA_MATCH_LIMIT | PCRE_EXTRA_MATCH_LIMIT_RECURSION; + extra->match_limit = PCRE_G(backtrack_limit); + extra->match_limit_recursion = PCRE_G(recursion_limit); } if (error != NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error while studying pattern"); diff --git a/ext/pcre/php_pcre.h b/ext/pcre/php_pcre.h index f352059e62..266f6760c6 100644 --- a/ext/pcre/php_pcre.h +++ b/ext/pcre/php_pcre.h @@ -70,6 +70,9 @@ ZEND_BEGIN_MODULE_GLOBALS(pcre) HashTable pcre_cache; long backtrack_limit; long recursion_limit; +#ifdef PCRE_STUDY_JIT_COMPILE + zend_bool jit; +#endif int error_code; ZEND_END_MODULE_GLOBALS(pcre) diff --git a/ext/standard/tests/general_functions/ini_get_all.phpt b/ext/standard/tests/general_functions/ini_get_all.phpt index 60cd38a723..806831edfc 100644 --- a/ext/standard/tests/general_functions/ini_get_all.phpt +++ b/ext/standard/tests/general_functions/ini_get_all.phpt @@ -30,7 +30,7 @@ Warning: ini_get_all(): Unable to find extension 'nosuchextension' in %s on line bool(false) array(0) { } -array(2) { +array(3) { ["pcre.backtrack_limit"]=> array(3) { ["global_value"]=> @@ -40,6 +40,15 @@ array(2) { ["access"]=> int(7) } + ["pcre.jit"]=> + array(3) { + ["global_value"]=> + string(1) "1" + ["local_value"]=> + string(1) "1" + ["access"]=> + int(7) + } ["pcre.recursion_limit"]=> array(3) { ["global_value"]=> @@ -50,9 +59,11 @@ array(2) { int(7) } } -array(2) { +array(3) { ["pcre.backtrack_limit"]=> string(7) "1000000" + ["pcre.jit"]=> + string(1) "1" ["pcre.recursion_limit"]=> string(6) "100000" } diff --git a/sapi/cli/tests/006.phpt b/sapi/cli/tests/006.phpt index 3d5c916e9c..e9e8b7e219 100644 --- a/sapi/cli/tests/006.phpt +++ b/sapi/cli/tests/006.phpt @@ -34,6 +34,9 @@ string(%d) "Extension [ extension #%d pcre version ] { Entry [ pcre.recursion_limit ] Current = '%d' } + Entry [ pcre.jit ] + Current = '%d' + } } - Constants [14] {