Edit report at https://bugs.php.net/bug.php?id=70805&edit=1
ID: 70805
Updated by: laruence@php.net
Reported by: alex dot a dot pott at gmail dot com
Summary: Segmentation faults whilst running Drupal 8 test
suite
Status: Feedback
Type: Bug
Package: Reproducible crash
Operating System: OS X & Linux
PHP Version: 7.0.0RC5
Block user comment: N
Private report: N
New Comment:
I can not reproduce the segfualt :<
$ php7 ./core/scripts/run-tests.sh --color --non-html --url http://drupal.jx-lj-hxc.lianjia.com:8000/
--verbose --class 'Drupal\basic_auth\Tests\Authentication\BasicAuthTest'
Drupal test run
---------------
Tests to be run:
- Drupal\basic_auth\Tests\Authentication\BasicAuthTest
Test run started:
Friday, October 30, 2015 - 09:02
Test summary
------------
Drupal\basic_auth\Tests\Authentication\BasicAuthTest 81 passes 20
messages
Test run duration: 1 min 5 sec
Detailed test results
---------------------
---- Drupal\basic_auth\Tests\Authentication\BasicAuthTest ----
Status Group Filename Line Function
--------------------------------------------------------------------------------
Pass Other run-tests.sh 656 simpletest_script_run_one_test()
Enabled modules: basic_auth, router_test, locale
Pass User login BasicAuthTest.php 41 Drupal\basic_auth\Tests\Authenticat
User created with name jXw1KEde and pass 7MK6dpzWSz
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
200 (7.08 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Other BasicAuthTest.php 45 Drupal\basic_auth\Tests\Authenticat
Account name is displayed.
Pass Browser BasicAuthTest.php 46 Drupal\basic_auth\Tests\Authenticat
HTTP response is OK
Pass Other BasicAuthTest.php 48 Drupal\basic_auth\Tests\Authenticat
Value false is FALSE.
Pass Other BasicAuthTest.php 49 Drupal\basic_auth\Tests\Authenticat
Cache-Control is not set to public
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
403 (6.22 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Other BasicAuthTest.php 52 Drupal\basic_auth\Tests\Authenticat
Bad basic auth credentials do not authenticate the user.
Pass Browser BasicAuthTest.php 53 Drupal\basic_auth\Tests\Authenticat
Access is not granted.
Pass Browser BasicAuthTest.php 56 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
401 (6.21 KB).
Pass Browser BasicAuthTest.php 56 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Other BasicAuthTest.php 57 Drupal\basic_auth\Tests\Authenticat
Value 'Basic realm="Drupal"' is equal to value 'Basic
realm="Drupal"'.
Pass Browser BasicAuthTest.php 58 Drupal\basic_auth\Tests\Authenticat
Not authenticated on the route that allows only basic_auth. Prompt to
authenticate received.
Pass Browser BasicAuthTest.php 60 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/admin
returned 403 (6.22 KB).
Pass Browser BasicAuthTest.php 60 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on "http://drupal.jx-lj-hxc.lianjia.com:8000/admin"
Pass Browser BasicAuthTest.php 61 Drupal\basic_auth\Tests\Authenticat
No authentication prompt for routes not explicitly defining authentication
providers.
Pass Role BasicAuthTest.php 63 Drupal\basic_auth\Tests\Authenticat
Created role ID 'gqgspyxm' with name 'H26<>&$0'.
Pass Role BasicAuthTest.php 63 Drupal\basic_auth\Tests\Authenticat
Created permissions: access administration pages
Pass User login BasicAuthTest.php 63 Drupal\basic_auth\Tests\Authenticat
User created with name ytJJEDdB and pass cnVErhuQKY
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/admin
returned 403 (7.23 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on "http://drupal.jx-lj-hxc.lianjia.com:8000/admin"
Pass Other BasicAuthTest.php 66 Drupal\basic_auth\Tests\Authenticat
User is not logged in
Pass Browser BasicAuthTest.php 67 Drupal\basic_auth\Tests\Authenticat
No basic authentication for routes not explicitly defining authentication
providers.
Pass Browser BasicAuthTest.php 73 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test10
returned
200 (6.13 KB).
Pass Browser BasicAuthTest.php 73 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test10"
Pass Other BasicAuthTest.php 74 Drupal\basic_auth\Tests\Authenticat
Value 'MISS' is equal to value 'MISS'.
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test10
returned
200 (7.08 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test10"
Pass Other BasicAuthTest.php 76 Drupal\basic_auth\Tests\Authenticat
Value false is FALSE.
Pass Other BasicAuthTest.php 77 Drupal\basic_auth\Tests\Authenticat
No page cache response when requesting a cached page with basic auth
credentials.
Pass Other run-tests.sh 656 simpletest_script_run_one_test()
Enabled modules: basic_auth, router_test, locale
Pass User login BasicAuthTest.php 90 Drupal\basic_auth\Tests\Authenticat
User created with name kQu49mcT and pass yvk3xMjnTp
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
403 (6.22 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
403 (6.22 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
403 (6.22 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Browser BasicAuthTest.php 102 Drupal\basic_auth\Tests\Authenticat
Access is blocked because of IP based flood prevention.
Pass Other run-tests.sh 656 simpletest_script_run_one_test()
Enabled modules: basic_auth, router_test, locale
Pass User login BasicAuthTest.php 115 Drupal\basic_auth\Tests\Authenticat
User created with name vSctJJ2H and pass 6AVPqgEVLs
Pass User login BasicAuthTest.php 118 Drupal\basic_auth\Tests\Authenticat
User created with name btMyybqw and pass jkaZ94GgYt
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
403 (6.22 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
200 (7.08 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Browser BasicAuthTest.php 126 Drupal\basic_auth\Tests\Authenticat
Per user flood prevention gets reset on a successful login.
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
403 (6.22 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
403 (6.22 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
403 (6.22 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Browser BasicAuthTest.php 135 Drupal\basic_auth\Tests\Authenticat
The user account is blocked due to per user flood prevention.
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
200 (7.08 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Browser BasicAuthTest.php 140 Drupal\basic_auth\Tests\Authenticat
Per user flood prevention does not block access for other users.
Pass Other run-tests.sh 656 simpletest_script_run_one_test()
Enabled modules: basic_auth, router_test, locale
Pass User login BasicAuthTest.php 150 Drupal\basic_auth\Tests\Authenticat
User created with name cLudjJSG and pass NyejYH6UwE
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
200 (7.09 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Other BasicAuthTest.php 154 Drupal\basic_auth\Tests\Authenticat
Account name is displayed.
Pass Browser BasicAuthTest.php 155 Drupal\basic_auth\Tests\Authenticat
HTTP response is OK
Pass Other run-tests.sh 656 simpletest_script_run_one_test()
Enabled modules: basic_auth, router_test, locale
Pass User login BasicAuthTest.php 163 Drupal\basic_auth\Tests\Authenticat
User created with name moXVg44t and pass 5MScKsJPAW
Pass Browser BasicAuthTest.php 167 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
401 (6.21 KB).
Pass Browser BasicAuthTest.php 167 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Browser BasicAuthTest.php 168 Drupal\basic_auth\Tests\Authenticat
The user is blocked when no credentials are passed.
Pass Other BasicAuthTest.php 169 Drupal\basic_auth\Tests\Authenticat
No raw exception is displayed on the page.
Pass Other BasicAuthTest.php 170 Drupal\basic_auth\Tests\Authenticat
A user friendly access unauthorized message is displayed.
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
403 (6.22 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Browser BasicAuthTest.php 174 Drupal\basic_auth\Tests\Authenticat
The user is blocked when empty credentials are passed.
Pass Other BasicAuthTest.php 175 Drupal\basic_auth\Tests\Authenticat
A user friendly access denied message is displayed
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
GET http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11
returned
403 (6.22 KB).
Pass Browser BasicAuthTestTrai 31 Drupal\basic_auth\Tests\Authenticat
Valid HTML found on
"http://drupal.jx-lj-hxc.lianjia.com:8000/router_test/test11"
Pass Browser BasicAuthTest.php 179 Drupal\basic_auth\Tests\Authenticat
The user is blocked when wrong credentials are passed.
Pass Other BasicAuthTest.php 180 Drupal\basic_auth\Tests\Authenticat
A user friendly access denied message is displayed
thanks
Previous Comments:
------------------------------------------------------------------------
[2015-10-29 19:57:16] fabian at tag1consulting dot com
I managed to simplify, Still need the 20001 entry, but getting the original backtrace now:
1. Download Drupal 8
2. Install Drupal via LAMP stack (Still trying to avoid that)
3. Copy the following into front.php and run it:
<?php
use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;
$autoloader = require_once 'autoload.php';
$request = Request::createFromGlobals();
$kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod', FALSE);
$kernel->boot();
$kernel->rebuildContainer();
print "OK".PHP_EOL;
Creates the usual backtrace:
Program received signal SIGSEGV, Segmentation fault.
0x000000000093ca6a in zend_mm_alloc_small (heap=0x7fffef400040, size=88, bin_num=9,
__zend_filename=0xfc9940 "/home/ubuntu/php7/php-src/Zend/zend_hash.c",
__zend_lineno=1716, __zend_orig_filename=0x0, __zend_orig_lineno=0)
at /home/ubuntu/php7/php-src/Zend/zend_alloc.c:1291
1291 heap->free_slot[bin_num] = p->next_free_slot;
(gdb) bt
#0 0x000000000093ca6a in zend_mm_alloc_small (heap=0x7fffef400040, size=88, bin_num=9,
__zend_filename=0xfc9940 "/home/ubuntu/php7/php-src/Zend/zend_hash.c",
__zend_lineno=1716, __zend_orig_filename=0x0, __zend_orig_lineno=0)
at /home/ubuntu/php7/php-src/Zend/zend_alloc.c:1291
#1 0x000000000093ccc1 in zend_mm_alloc_heap (heap=0x7fffef400040, size=88, __zend_filename=0xfc9940
"/home/ubuntu/php7/php-src/Zend/zend_hash.c",
__zend_lineno=1716, __zend_orig_filename=0x0, __zend_orig_lineno=0) at
/home/ubuntu/php7/php-src/Zend/zend_alloc.c:1359
#2 0x000000000093f724 in _emalloc (size=56, __zend_filename=0xfc9940
"/home/ubuntu/php7/php-src/Zend/zend_hash.c", __zend_lineno=1716,
------------------------------------------------------------------------
[2015-10-29 19:28:28] ab@php.net
Hm, but the script doesn't crash with the original case. We'd better have a reproducer for
the unchanged PHP to reproduce the original case as base.
Thanks.
------------------------------------------------------------------------
[2015-10-29 19:19:25] ab@php.net
@Fabian thanks for the further investigation. Seems that we really need a stable case to reproduce.
Right now it's really tedious as the most time is spent to setup Drupal and still no good
understanding what happens :(
Btw. the most of the core devs sit in #php.pecl on EFnet, it doesn't require special rights to
join.
Thanks.
------------------------------------------------------------------------
[2015-10-29 19:17:02] fabian at tag1consulting dot com
Together with setting:
#define GC_ROOT_BUFFER_MAX_ENTRIES 20001
the following script produces a segfault: A different backtrace, but it seems related so posting
here, as I hope that the fix for this script might also fix this issue here.
---
<?php
class Foo {
protected $list = [];
protected function doSomething($var) {
$var->ref = $this;
$this->list[] = $var;
}
public function init() {
$array = [];
for ($i = 0; $i < 19000; $i++) {
$array[] = new \StdClass();
}
foreach ($array as $value) {
$this->doSomething($value);
}
$this->list = [];
$array = [];
}
}
$foo = new Foo();
$foo->init();
---
Backtrace:
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00000000009a3dce in gc_remove_from_roots (root=0x7f72b10e9050) at
/home/ubuntu/php7/php-src/Zend/zend_gc.c:120
120 root->prev->next = root->next;
Traceback (most recent call last):
File "/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py",
line 63, in <module>
from libstdcxx.v6.printers import register_libstdcxx_printers
ImportError: No module named 'libstdcxx'
(gdb) bt
#0 0x00000000009a3dce in gc_remove_from_roots (root=0x7f72b10e9050) at
/home/ubuntu/php7/php-src/Zend/zend_gc.c:120
#1 0x00000000009a4326 in gc_remove_from_buffer (ref=0x7f72a87d9fa0) at
/home/ubuntu/php7/php-src/Zend/zend_gc.c:286
#2 0x00000000009bd0d8 in zend_objects_store_del (object=0x7f72a87d9fa0) at
/home/ubuntu/php7/php-src/Zend/zend_objects_API.c:190
#3 0x000000000096f190 in _zval_dtor_func_for_ptr (p=0x7f72a87d9fa0, __zend_filename=0xfc9940
"/home/ubuntu/php7/php-src/Zend/zend_hash.c",
__zend_lineno=1261) at /home/ubuntu/php7/php-src/Zend/zend_variables.c:109
#4 0x000000000098354e in i_zval_ptr_dtor (zval_ptr=0x7f72a7542fe8, __zend_filename=0xfc9940
"/home/ubuntu/php7/php-src/Zend/zend_hash.c",
__zend_lineno=1261) at /home/ubuntu/php7/php-src/Zend/zend_variables.h:58
#5 0x00000000009870a8 in zend_array_destroy (ht=0x7f72a8659540) at
/home/ubuntu/php7/php-src/Zend/zend_hash.c:1261
#6 0x000000000096f13a in _zval_dtor_func_for_ptr (p=0x7f72a8659540, __zend_filename=0xfcec40
"/home/ubuntu/php7/php-src/Zend/zend_execute.h",
__zend_lineno=103) at /home/ubuntu/php7/php-src/Zend/zend_variables.c:96
#7 0x00000000009c4fc3 in zend_assign_to_variable (variable_ptr=0x7f72a8614150,
value=0x7f72a8674410, value_type=1 '\001')
at /home/ubuntu/php7/php-src/Zend/zend_execute.h:103
#8 0x0000000000a0fbfc in ZEND_ASSIGN_SPEC_CV_CONST_HANDLER () at
/home/ubuntu/php7/php-src/Zend/zend_vm_execute.h:31718
#9 0x00000000009cd2ff in execute_ex (ex=0x7f72a8614030) at
/home/ubuntu/php7/php-src/Zend/zend_vm_execute.h:414
#10 0x00000000009cd411 in zend_execute (op_array=0x7f72a867e000, return_value=0x0) at
/home/ubuntu/php7/php-src/Zend/zend_vm_execute.h:458
#11 0x0000000000972c42 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at
/home/ubuntu/php7/php-src/Zend/zend.c:1428
#12 0x00000000008e048d in php_execute_script (primary_file=0x7ffd2b501520) at
/home/ubuntu/php7/php-src/main/main.c:2471
#13 0x0000000000a31509 in do_cli (argc=2, argv=0x252fe40) at
/home/ubuntu/php7/php-src/sapi/cli/php_cli.c:974
#14 0x0000000000a326cd in main (argc=2, argv=0x252fe40) at
/home/ubuntu/php7/php-src/sapi/cli/php_cli.c:1345
------------------------------------------------------------------------
[2015-10-29 18:45:13] fabian at tag1consulting dot com
Some more information:
By setting:
#define GC_ROOT_BUFFER_MAX_ENTRIES 20001
in zend_gc.c the bug occurs way way earlier in the test run.
Also a normal call of index.php did give:
zend_gc_collect_cycles
php: /home/ubuntu/php7/php-src/Zend/zend_gc.c:226: gc_possible_root: Assertion
`(ref)->gc.u.v.type == 7 || (ref)->gc.u.v.type == 8' failed.
Aborted (core dumped)
Not sure if this is helpful yet, but getting closer to a reproducible script.
------------------------------------------------------------------------
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=70805
--
Edit this bug report at https://bugs.php.net/bug.php?id=70805&edit=1