php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #78476 Segfault when running Monolog test suite on 7.4snapshot
Submitted: 2019-08-30 13:50 UTC Modified: 2019-11-07 11:05 UTC
Votes:1
Avg. Score:3.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: seld@php.net Assigned: nikic (profile)
Status: Closed Package: Reproducible crash
PHP Version: 7.4Git-2019-08-30 (snap) OS: Linux
Private report: No CVE-ID: None
 [2019-08-30 13:50 UTC] seld@php.net
Description:
------------
See Travis job output. That's all the info I have sorry no time to dig further at the moment.

https://travis-ci.org/Seldaek/monolog/jobs/578742282


Test script:
---------------
composer create-project monolog/monolog
cd monolog
vendor/bin/phpunit


Expected result:
----------------
No segfault :)

Actual result:
--------------
Segfault :(

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2019-08-30 13:57 UTC] nikic@php.net
Can't reproduce with current 7.4 HEAD.
 [2019-09-01 13:28 UTC] nikic@php.net
-Status: Open +Status: Verified
 [2019-09-01 13:28 UTC] nikic@php.net
Can reproduce with opcache ... didn't know that's enabled on Travis.
 [2019-09-02 07:57 UTC] nikic@php.net
Heh, this is a stack overflow caused by infinite recursion in the error handler for a "Trying to access array offset on value of type null" notice.

The original notice is triggered in https://github.com/Seldaek/monolog/blob/21b1705c3e6a6312687a275870e3e539af0a3896/src/Monolog/Handler/ElasticsearchHandler.php#L150 and the infinite recursion occurs in https://github.com/Seldaek/monolog/blob/21b1705c3e6a6312687a275870e3e539af0a3896/src/Monolog/ErrorHandler.php#L201.

Not sure where the opcache-specific bit in this is.
 [2019-09-02 08:10 UTC] nikic@php.net
@seld: The problematic error handler is set up here: https://github.com/Seldaek/monolog/blob/21b1705c3e6a6312687a275870e3e539af0a3896/tests/Monolog/ErrorHandlerTest.php#L40-L42

So while there is presumably also an opcache bug here that causes the notice in the first place, this code should probably also be fixed to make sure that any notice thrown in the testsuite does not automatically turn into a stack overflow segfault.
 [2019-09-05 13:29 UTC] seld@php.net
Ok thanks for the find. I fixed it in https://github.com/Seldaek/monolog/commit/0f39561898a66334fe5f2a6768eb8043d2f34cd5 which fixes the build. 

It seems to pass without notice either so I am not sure how this is possible. If opcache caused the notice which then crashed with the segfault the notice should still be there. If opcache had only an issue with the error handler then it should show a notice now?
 [2019-09-12 10:08 UTC] nikic@php.net
@seld: If I patch https://github.com/Seldaek/monolog/blob/a053af62ad5bfb0355dfb55d3d15126f1c836708/src/Monolog/Handler/ElasticsearchHandler.php#L148 to throw an exception if $responses is null, then I do get that exception. So the notice should also be thrown -- there's probably still an error handler around that suppresses it.

That said, I get the null value there both with and without opcache, so I'm not sure what the role of opcache was here originally...
 [2019-11-07 11:05 UTC] nikic@php.net
-Status: Verified +Status: Closed -Assigned To: +Assigned To: nikic
 [2019-11-07 11:05 UTC] nikic@php.net
Closing this as the original issue was resolved...
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Fri Dec 13 10:01:24 2019 UTC