From 9609e23f185bd22d2a4c72ce3432698e33e1b87b Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Tue, 6 Aug 2024 16:24:36 +0200 Subject: [PATCH] [Messenger] Prevent waiting time to overflow when using long delays --- .../Component/Messenger/Retry/MultiplierRetryStrategy.php | 4 ++-- .../Messenger/Tests/Retry/MultiplierRetryStrategyTest.php | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Messenger/Retry/MultiplierRetryStrategy.php b/src/Symfony/Component/Messenger/Retry/MultiplierRetryStrategy.php index 8e25783676779..bec4290122cfa 100644 --- a/src/Symfony/Component/Messenger/Retry/MultiplierRetryStrategy.php +++ b/src/Symfony/Component/Messenger/Retry/MultiplierRetryStrategy.php @@ -83,7 +83,7 @@ public function getWaitingTime(Envelope $message, ?\Throwable $throwable = null) $delay = $this->delayMilliseconds * $this->multiplier ** $retries; if ($this->jitter > 0) { - $randomness = (int) ($delay * $this->jitter); + $randomness = (int) min(\PHP_INT_MAX, $delay * $this->jitter); $delay += random_int(-$randomness, +$randomness); } @@ -91,6 +91,6 @@ public function getWaitingTime(Envelope $message, ?\Throwable $throwable = null) return $this->maxDelayMilliseconds; } - return (int) ceil($delay); + return (int) min(\PHP_INT_MAX, ceil($delay)); } } diff --git a/src/Symfony/Component/Messenger/Tests/Retry/MultiplierRetryStrategyTest.php b/src/Symfony/Component/Messenger/Tests/Retry/MultiplierRetryStrategyTest.php index d06426ea40672..d89153ebad19b 100644 --- a/src/Symfony/Component/Messenger/Tests/Retry/MultiplierRetryStrategyTest.php +++ b/src/Symfony/Component/Messenger/Tests/Retry/MultiplierRetryStrategyTest.php @@ -60,6 +60,14 @@ public function testGetWaitTime(int $delay, float $multiplier, int $maxDelay, in $this->assertSame($expectedDelay, $strategy->getWaitingTime($envelope)); } + public function testGetWaitTimeWithOverflowingDelay() + { + $strategy = new MultiplierRetryStrategy(512, \PHP_INT_MAX, 2, 0, 1); + $envelope = new Envelope(new \stdClass(), [new RedeliveryStamp(10)]); + + $this->assertSame(\PHP_INT_MAX, $strategy->getWaitingTime($envelope)); + } + public static function getWaitTimeTests(): iterable { // delay, multiplier, maxDelay, retries, expectedDelay pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy