|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2015-05-15 20:28 UTC] berdir@php.net
Description:
------------
We're working on making Drupal 8 compatible with PHP7.
Around 4 of our test have a segfault and the end of the test, during shutdown. This is relatively new (1-2weeks), they passed before.
Program received signal SIGSEGV, Segmentation fault.
i_zval_ptr_dtor (zval_ptr=0x7fffed5ffa80) at /home/berdir/tools/php-src/Zend/zend_variables.h:56
56 if (!Z_DELREF_P(zval_ptr)) {
(gdb) bt
#0 i_zval_ptr_dtor (zval_ptr=0x7fffed5ffa80) at /home/berdir/tools/php-src/Zend/zend_variables.h:56
#1 destroy_zend_class (zv=<optimized out>) at /home/berdir/tools/php-src/Zend/zend_opcode.c:260
#2 0x00000000007cb74c in _zend_hash_del_el_ex (prev=<optimized out>, p=0x136d440, idx=710, ht=0x113ddd0) at /home/berdir/tools/php-src/Zend/zend_hash.c:938
#3 _zend_hash_del_el (p=0x136d440, idx=710, ht=0x113ddd0) at /home/berdir/tools/php-src/Zend/zend_hash.c:962
#4 zend_hash_reverse_apply (ht=0x113ddd0, apply_func=apply_func@entry=0x7a6ee0 <clean_non_persistent_class>) at /home/berdir/tools/php-src/Zend/zend_hash.c:1532
#5 0x00000000007a772b in shutdown_executor () at /home/berdir/tools/php-src/Zend/zend_execute_API.c:351
#6 0x00000000007b6e2b in zend_deactivate () at /home/berdir/tools/php-src/Zend/zend.c:964
#7 0x0000000000758c22 in php_request_shutdown (dummy=<optimized out>) at /home/berdir/tools/php-src/main/main.c:1818
#8 0x0000000000854532 in do_cli (argc=-18992, argv=0x0) at /home/berdir/tools/php-src/sapi/cli/php_cli.c:1135
#9 0x00000000004372a0 in main (argc=-18992, argv=0x0) at /home/berdir/tools/php-src/sapi/cli/php_cli.c:1334
One of the failing tests is Drupal\migrate_drupal\Tests\d6\MigrateUserPictureFileTest.
Instructions on how to run the test are in https://bugs.php.net/bug.php?id=69371, for example.
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Nov 06 22:00:01 2025 UTC |
I've tried to debug this a bit more and I think current is somehow messed up. Why and what it's supposed to be, I don't know: (gdb) print current $5 = (zval *) 0x7fffe3e7b4c0 (gdb) print *current $6 = {value = {lval = 1, dval = 4.9406564584124654e-324, counted = 0x1, str = 0x1, arr = 0x1, obj = 0x1, res = 0x1, ref = 0x1, ast = 0x1, zv = 0x1, ptr = 0x1, ce = 0x1, func = 0x1, ww = {w1 = 1, w2 = 0}}, u1 = {v = {type = 4 '\004', type_flags = 0 '\000', const_flags = 0 '\000', reserved = 0 '\000'}, type_info = 4}, u2 = {var_flags = 4294967295, next = 4294967295, cache_slot = 4294967295, lineno = 4294967295, num_args = 4294967295, fe_pos = 4294967295, fe_iter_idx = 4294967295}} (gdb) print current->value $7 = {lval = 1, dval = 4.9406564584124654e-324, counted = 0x1, str = 0x1, arr = 0x1, obj = 0x1, res = 0x1, ref = 0x1, ast = 0x1, zv = 0x1, ptr = 0x1, ce = 0x1, func = 0x1, ww = { w1 = 1, w2 = 0}} (gdb) print *current->value->str Cannot access memory at address 0x1 This is the array of postfields that are processed here: array(9) { ["file_test_replace"]=> int(1) ["file_subdir"]=> string(0) "" ["extensions"]=> string(0) "" ["is_image_file"]=> string(1) "1" ["op"]=> string(6) "Submit" ["form_build_id"]=> string(48) "form-8Jctuh1GUx5Te_wooBYvPLbOJhXOSUOgsQ-emHSKW8g" ["form_token"]=> string(43) "XcSxNC5I2nYo2-zg29Mo7rsmImYJWq7JNbK3WlwVZzc" ["form_id"]=> string(15) "_file_test_form" ["files[file_test_upload]"]=> object(CURLFile)#8517 (3) { ["name"]=> string(69) "/home/berdir/Projekte/d8/sites/simpletest/127071/files/image-test.png" ["mime"]=> string(0) "" ["postname"]=> string(0) "" } } I noticed that file_test_replace does seem to be an integer, which might be the cause for this. In fact, when I add an explicit string cast for the value, then it works! So I guess current is optimized and in this case a zval for an int, not a string, but the code expects a string? This means I can work around this in our tests, but this isn't supposed to break?