Bug #77260 [Com]: preg_match_all(): JIT compilation failed: no more memory

From: Date: Tue, 17 Sep 2019 20:38:34 +0000
Subject: Bug #77260 [Com]: preg_match_all(): JIT compilation failed: no more memory
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-222795@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=77260&edit=1 ID: 77260 Comment by: robertwildling at gmail dot com Reported by: ettore at themecraft dot studio Summary: preg_match_all(): JIT compilation failed: no more memory Status: Open Type: Bug Package: PCRE related Operating System: macOS 10.13.6 PHP Version: 7.3.0 Block user comment: N Private report: N New Comment: I work with TYPO3. In the course of updating older versions, this same exact error happened to me, too. Turning of pcre_jit is no option, because TYPO3 won't work then. So I moved down to php 7.2.22. The interesting thing is that the error logger of TYPO3 catches the same preg* errors, too, but the system does not crash. I am also on macos HighSierra with a brew installation. Previous Comments: ------------------------------------------------------------------------ [2019-07-31 19:05:58] funky99 at gmx dot de I came accross this problem as we switched an internal apllication from PHP 7.0.32 to 7.3.6 (both FPM) on our Gentoo based Managed webserver. I excpected no or at least a slight increase in performance, but the opposite happened. I.e. on a rather small page, runtime changed from 20ms (7.0) to 40ms (7.3). On bigger pages it's worse. I checked the PHP errors and saw a couple of "preg*: JIT compilation failed: no more memory" errors, directly after the restart of the FPM processes. We are using an rather old framework which works a lot with preg* functions for the template engine. If I set pcre.jit = 0 performance in PHP 7.0 gets also down to 40ms. As erik at coretech dot se mentioned it might have to do with SELinux. But it's the same machine and same Linux kernel, so if the problem is because of SELinux or other security feeatures, shouldn't it not work on PHP 7.0 as well? (I'm not a Linux expert) So I it may be a bug which should have been fixed for PHP 7.3 (I has the same same problems for PHP 7.1. and 7.2). ------------------------------------------------------------------------ [2019-07-14 10:07:45] mc12345678 at mc12345678 dot com Working with Zen Cart, most recently the development version 1.5.7 available from https://github.com/zencart/zencart. With the following server characteristics: Server OS: Linux 4.14.117-grsec-grsec+ Server Date: 07/14/2019 02:03:38 Server Up Time: 02:03:38 up 6 days, 18:52, 0 users, load average: 3.28, 3.85, 3.73 HTTP Server: Apache PHP Version: 7.3.6 (Zend: 3.3.6) PHP File Uploads: On Upload Max Size: 2M PHP Memory Limit: 512M POST Max Size: 8M Database Engine: MySQL 5.7.25-log Database Date: 07/14/2019 02:03:38 Database Data Size: 458 kB Database Index Size: 559 kB MySQL Slow Query Log Status: On MySQL Slow Query Log File: /dh/mysql/logs/mysql.leberman.slow MySQL Mode: NO_ENGINE_SUBSTITUTION Software is ableto use a few instances of a preg_xxxx function, but then appears to run out of memory. Increasing the memory limit has had no positive impact on the generation of warning messages. So far other than potentially substituting another filter type method (strstr, strops, etc...), the only successful way of preventing the warnings has been some php.ini related disablement of jcre.jit 0 either directly in the php.ini (affecting all code that executes that php.ini file) or from within using '@ini_set("pcre.jit", "0");'. A suggestion has been made to disable using .htaccess; however, this particular software product does not use a base .htaccess file. The recommended coding was: 'php_value pcre.jit 0'. Someone using the same software on a Macintosh was able to operate without any such additional action. Discussion is provided here: https://github.com/zencart/zencart/pull/2537 ------------------------------------------------------------------------ [2019-06-20 18:45:11] self at danpock dot me @erik, what do you think the issue on Mac OS is then? AFAIK, Mac doesn't have SE Linux - though I'm unsure if it has something similar? ------------------------------------------------------------------------ [2019-06-19 05:36:31] erik at coretech dot se This is probably not a bug but selinux blocking php from fiddling with executable stacks. This is probably a bad idea to enable on a hardened system and should be disabled within php.ini (pcre.jit=0) To check if this generated a selinux warning use: aureport --avc 1. 06/19/2019 07:17:05 httpd system_u:system_r:httpd_t:s0 9 process execmem system_u:system_r:httpd_t:s0 denied 240395 If you still want to enable this, use: setsebool -P httpd_execmem on /Erik Lundin ------------------------------------------------------------------------ [2019-05-13 07:44:11] mathieu dot ferment at prestashop dot com Same issue when trying to run composer install on prestashop project (ithub.com/PrestaShop/PrestaShop/). php7.3 installed using homebrew $ /usr/local/Cellar/php/7.3.5/bin/php composer.phar install PHP Fatal error: Uncaught ErrorException: preg_match_all(): JIT compilation failed: no more memory in phar:///Users/mFerment/www/prestashop/PrestaShop/composer.phar/vendor/symfony/console/Formatter/OutputFormatter.php:137 Worked around it by switching pcre.jit from 1 to 0. PHP 7.3.5 (cli) (built: May 2 2019 12:42:24) ( NTS ) ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=77260 -- Edit this bug report at https://bugs.php.net/bug.php?id=77260&edit=1

« previous php.bugs (#222795) next »