php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #78514 Preloading segfaults with inherited typed property
Submitted: 2019-09-08 20:02 UTC Modified: 2019-09-09 09:36 UTC
From: kocsismate at woohoolabs dot com Assigned: nikic (profile)
Status: Closed Package: opcache
PHP Version: 7.4.0RC1 OS: Alpine Linux 3.10
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: kocsismate at woohoolabs dot com
New email:
PHP Version: OS:

 

 [2019-09-08 20:02 UTC] kocsismate at woohoolabs dot com
Description:
------------
I tried out preloading by generating the preload file for a personal project of mine using my DI container (https://github.com/woohoolabs/zen#generating-a-preload-file).

After some struggle, I got it work, so I managed to preload all the files I wanted with PHP 7.4 beta 1 (via Docker). However, something could happen after some time because preloading stopped working, and I got a segfault on each PHP startup.

I don't know if it is only a coincidence, but the first time I noticed it is around when I introduced property type declarations everywhere in my app and in some of my open-source libraries (which are also preloaded).

Now, that I still have this problem on PHP 7.4 RC1, I thought it's time to report it.

Test script:
---------------
This is the most minimal example I could come up with:
- Download and unzip the following gist: https://gist.github.com/kocsismate/d7f71f5da9e1cefbbdbee040b49c1984
- Run "composer install"
- Run "docker-compose up"



Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2019-09-09 09:00 UTC] nikic@php.net
-Status: Open +Status: Verified
 [2019-09-09 09:00 UTC] nikic@php.net
php: /home/nikic/php-7.4/ext/opcache/zend_persist.c:934: zend_update_parent_ce: Assertion `ce' failed.
 [2019-09-09 09:28 UTC] nikic@php.net
-Status: Verified +Status: Assigned -Package: Unknown/Other Function +Package: opcache -Assigned To: +Assigned To: nikic
 [2019-09-09 09:28 UTC] nikic@php.net
I believe what happens here is that a class-typed property is inherited and shared by two classes. We translate the class to SHM when visiting one class and then try to do it again when visiting the second, at which point the xlat lookup fails.
 [2019-09-09 09:36 UTC] nikic@php.net
-Summary: Preloading segfaults +Summary: Preloading segfaults with inherited typed property
 [2019-09-09 09:37 UTC] nikic@php.net
Automatic comment on behalf of nikita.ppv@gmail.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=36a8cf5182f8320270031d29d04b3a6acb3168d2
Log: Fixed bug #78514
 [2019-09-09 09:37 UTC] nikic@php.net
-Status: Assigned +Status: Closed
 [2019-09-09 11:51 UTC] kocsismate at woohoolabs dot com
Thank you, Nikita, for your quick response and fix! :)
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Nov 23 08:01:28 2024 UTC