Bug #71537 [NEW]: PCRE segfault from Opcache

From: Date: Fri, 05 Feb 2016 16:53:59 +0000
Subject: Bug #71537 [NEW]: PCRE segfault from Opcache
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-199070@lists.php.net to get a copy of this message
From: max dot goldberg at gmail dot com Operating system: Debian/Centos PHP version: 7.0.3 Package: opcache Bug Type: Bug Bug description:PCRE segfault from Opcache Description: ------------ In certain conditions, PHP 7 will segfault when preg_replace() is executed from the opcache. This has been happening since at least 7.0.0RC1 and up until php-src as of today. Turning the opcache off, or blacklisting just the calling script seems to make the problem go away. Turning opcache.jit on or off seems to have no bearing on the issue. opcache ini settings are all at their default otherwise. Despite my best efforts, I have not been able to reduce the code causing the segfault to single script. I'm available on efnet in #php.pecl or via email to work through it if need be. Actual result: -------------- (gdb) bt #0 0x00000000004f486f in php_pcre_replace_impl (pce=0x127f380, subject_str=0x7ffff21b2f00, subject=0x7ffff21b2f18 "/find-a-class/studio/:id(/:offset)/", subject_len=35, replace_val=0x7fffea14a7d8, is_callable_replace=0, limit=-1, replace_count=0x7fffffffa78c) at /usr/local/src/php-src/ext/pcre/php_pcre.c:1197 #1 0x00000000004f43f7 in php_pcre_replace (regex=0x7ffff2077fc0, subject_str=0x7ffff21b2f00, subject=0x7ffff21b2f18 "/find-a-class/studio/:id(/:offset)/", subject_len=35, replace_val=0x7fffea14a7d8, is_callable_replace=0, limit=-1, replace_count=0x7fffffffa78c) at /usr/local/src/php-src/ext/pcre/php_pcre.c:1055 #2 0x00000000004f5115 in php_replace_in_subject (regex=0x7ffff2016880, replace=0x7ffff2016890, subject=0x7ffff20168a0, limit=-1, is_callable_replace=0, replace_count=0x7fffffffa78c) at /usr/local/src/php-src/ext/pcre/php_pcre.c:1389 #3 0x00000000004f54e9 in preg_replace_impl (return_value=0x7ffff20167f0, regex=0x7ffff2016880, replace=0x7ffff2016890, subject=0x7ffff20168a0, limit_val=-1, is_callable_replace=0, is_filter=0) at /usr/local/src/php-src/ext/pcre/php_pcre.c:1469 #4 0x00000000004f5b4a in zif_preg_replace (execute_data=0x7ffff2016820, return_value=0x7ffff20167f0) at /usr/local/src/php-src/ext/pcre/php_pcre.c:1511 #5 0x00000000008e3595 in ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER (execute_data=0x7ffff2016700) at /usr/local/src/php-src/Zend/zend_vm_execute.h:714 #6 0x00000000008e29a4 in execute_ex (ex=0x7ffff2015750) at /usr/local/src/php-src/Zend/zend_vm_execute.h:417 #7 0x00000000008707ba in zend_call_function (fci=0x7fffffffaae0, fci_cache=0x7fffffffaab0) at /usr/local/src/php-src/Zend/zend_execute_API.c:860 #8 0x00000000006ebdae in zif_call_user_func_array (execute_data=0x7ffff20156d0, return_value=0x7ffff20156b0) at /usr/local/src/php-src/ext/standard/basic_functions.c:4815 #9 0x00000000008e3595 in ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER (execute_data=0x7ffff2015620) at /usr/local/src/php-src/Zend/zend_vm_execute.h:714 #10 0x00000000008e29a4 in execute_ex (ex=0x7ffff2015030) at /usr/local/src/php-src/Zend/zend_vm_execute.h:417 #11 0x00000000008e2ace in zend_execute (op_array=0x7ffff2001000, return_value=0x0) at /usr/local/src/php-src/Zend/zend_vm_execute.h:458 #12 0x0000000000887ce6 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /usr/local/src/php-src/Zend/zend.c:1427 #13 0x00000000007f8b3a in php_execute_script (primary_file=0x7fffffffcfd0) at /usr/local/src/php-src/main/main.c:2484 #14 0x0000000000958da7 in php_cli_server_dispatch_script (server=0x121cda0, client=0x13cff60) at /usr/local/src/php-src/sapi/cli/php_cli_server.c:1940 #15 0x000000000095954b in php_cli_server_dispatch (server=0x121cda0, client=0x13cff60) at /usr/local/src/php-src/sapi/cli/php_cli_server.c:2101 #16 0x0000000000959dc0 in php_cli_server_recv_event_read_request (server=0x121cda0, client=0x13cff60) at /usr/local/src/php-src/sapi/cli/php_cli_server.c:2315 #17 0x000000000095a132 in php_cli_server_do_event_for_each_fd_callback (_params=0x7fffffffd240, fd=9, event=1) at /usr/local/src/php-src/sapi/cli/php_cli_server.c:2400 #18 0x0000000000956421 in php_cli_server_poller_iter_on_active (poller=0x121cda8, opaque=0x7fffffffd240, callback=0x959f18 <php_cli_server_do_event_for_each_fd_callback>) at /usr/local/src/php-src/sapi/cli/php_cli_server.c:834 #19 0x000000000095a1a5 in php_cli_server_do_event_for_each_fd (server=0x121cda0, rhandler=0x959cc9 <php_cli_server_recv_event_read_request>, whandler=0x959de7 <php_cli_server_send_event>) at /usr/local/src/php-src/sapi/cli/php_cli_server.c:2418 #20 0x000000000095a209 in php_cli_server_do_event_loop (server=0x121cda0) at /usr/local/src/php-src/sapi/cli/php_cli_server.c:2428 #21 0x000000000095a543 in do_cli_server (argc=5, argv=0x1226b50) at /usr/local/src/php-src/sapi/cli/php_cli_server.c:2529 #22 0x0000000000950ce2 in main (argc=5, argv=0x1226b50) at /usr/local/src/php-src/sapi/cli/php_cli.c:1348 (gdb) info local extra = 0x7fffffffa540 extra_data = {flags = 50, study_data = 0x7ffff2077fc0, match_limit = 100, callout_data = 0x7fffffffa640, tables = 0x7fffffffa590 "\030/\033\362\377\177", match_limit_recursion = 100, mark = 0x7fffffffa528, executable_jit = 0x69f20e3ec0} exoptions = 8192 count = 1 offsets = 0x7fffffffa4d0 subpat_names = 0x0 num_subpats = 1 size_offsets = 3 new_len = 500990 alloc_len = 0 match_len = 32767 backref = 0 start_offset = 0 g_notempty = 0 replace_len = 681947597 replace = 0x7ffff2185b18 "" walkbuf = 0x0 walk = 0x7ffff2200001 <Address 0x7ffff2200001 out of bounds> match = 0x7ffff21b2f2d ":id(/:offset)/" piece = 0x7ffff21b2f18 "/find-a-class/studio/:id(/:offset)/" replace_end = 0x80001abe0ce5 <Address 0x80001abe0ce5 out of bounds> walk_last = 0 '\000' result_len = 0 mark = 0x0 result = 0x0 eval_result = 0x0 use_heap = 0 '\000' __PRETTY_FUNCTION__ = "php_pcre_replace_impl" (gdb) -- Edit bug report at https://bugs.php.net/bug.php?id=71537&edit=1 -- Try a snapshot (PHP 5.4): https://bugs.php.net/fix.php?id=71537&r=trysnapshot54 Try a snapshot (PHP 5.5): https://bugs.php.net/fix.php?id=71537&r=trysnapshot55 Try a snapshot (trunk): https://bugs.php.net/fix.php?id=71537&r=trysnapshottrunk Fixed in SVN: https://bugs.php.net/fix.php?id=71537&r=fixed Fixed in release: https://bugs.php.net/fix.php?id=71537&r=alreadyfixed Need backtrace: https://bugs.php.net/fix.php?id=71537&r=needtrace Need Reproduce Script: https://bugs.php.net/fix.php?id=71537&r=needscript Try newer version: https://bugs.php.net/fix.php?id=71537&r=oldversion Not developer issue: https://bugs.php.net/fix.php?id=71537&r=support Expected behavior: https://bugs.php.net/fix.php?id=71537&r=notwrong Not enough info: https://bugs.php.net/fix.php?id=71537&r=notenoughinfo Submitted twice: https://bugs.php.net/fix.php?id=71537&r=submittedtwice register_globals: https://bugs.php.net/fix.php?id=71537&r=globals PHP 4 support discontinued: https://bugs.php.net/fix.php?id=71537&r=php4 Daylight Savings: https://bugs.php.net/fix.php?id=71537&r=dst IIS Stability: https://bugs.php.net/fix.php?id=71537&r=isapi Install GNU Sed: https://bugs.php.net/fix.php?id=71537&r=gnused Floating point limitations: https://bugs.php.net/fix.php?id=71537&r=float No Zend Extensions: https://bugs.php.net/fix.php?id=71537&r=nozend MySQL Configuration Error: https://bugs.php.net/fix.php?id=71537&r=mysqlcfg

« previous php.bugs (#199070) next »