Description
Symfony version(s) affected
6.4
Description
This weekend I was seeing quite a few crashes in an app processing URLs in messenger.
segfault at 20 ip 00007f96350cc937 sp 00007fffa3b202e8 error 6 in libc.so.6[7f9634fa0000+155000] likely on CPU 2 (core 1, socket 0)
Trying to reproduce the bug locally I started to see warnings on the console I've never encountered before. Apparently there was a change in an upstream service where they now push content in the Link:
header since Friday.
Warning: PHP Request Shutdown: Cannot call the CURLOPT_PROGRESSFUNCTION in Unknown on line 0
PHP Warning: PHP Request Shutdown: Cannot call the CURLOPT_PROGRESSFUNCTION in Unknown on line 0
How to reproduce
- Inject
HttpClientInterface
into a command. - Request a URL where the server sends a
Link:
header. - Execute the command.
Possible Solution
As I don't need the resources at all (I'm only requesting the URL because I want to determine the content type, and sometimes the app gets an URL to HTML instead of e.g. images) my first idea was setting $maxPendingPushes
to 0 which seems to be passed-through all the way from HttpClient
to CurlClientState
.
I couldn't find any documented option for that parameter (like, e.g. max_pending_pushes
) so the only way I could come up with was to use a compiler pass.
<?php
declare(strict_types = 1);
namespace App\DependencyInjection;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
class MaxPushesCompilerPass implements CompilerPassInterface
{
#[\Override]
public function process(ContainerBuilder $container): void
{
$container
->getDefinition('http_client.transport')
->setArgument('maxPendingPushes', 0);
}
}
Additional Context
No response