Closed
Description
Symfony version(s) affected: 4.2.x
Description
We encountered an issue with the LoggerDataCollector
resulting in an error. We simply had an empty (aka zero bytes) deprecation.log file.
PHP Fatal error: Uncaught ErrorException: Warning: Invalid argument supplied for foreach() in ./vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php:132
Stack trace:
#0 ./web/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php(67): Symfony\Component\HttpKernel\DataCollector\LoggerDataCollector-getContainerDeprecationLogs()
#1 ./web/vendor/symfony/http-kernel/Profiler/Profiler.php(99): Symfony\Component\HttpKernel\DataCollector\LoggerDataCollector-lateCollect()
#2 ./web/vendor/symfony/http-kernel/EventListener/ProfilerListener.php(113): Symfony\Component\HttpKernel\Profiler\Profiler-saveProfile(Object(Symfony\Component\HttpKernel\Profiler\Profile))
#3 ./web/vendor/symfony/event-dispatcher/Debug/WrappedListener.php(115): Symfony\Component\HttpKernel\EventListener\ProfilerListener-onKernelTerminate(Object(Symfony\Component\HttpKernel\Event\PostResponseEvent), 'kernel.terminat...', Object(Symfony\Component\HttpKernel\Debug\ in ./web/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php on line 132
The reason is the direct unserialization of the file's content. There's just a check if the file exists:
How to reproduce
Touching deprecation.log
in you log directory should be enough to enforce this.
Possible Solution
Extend the check if the file is not empty or the unserialized content is iterable?
Cheers
Matthias