From a65fdf08194f528fc05b49b2610e3646ca2390b8 Mon Sep 17 00:00:00 2001 From: Maarten de Keizer Date: Sun, 26 Dec 2021 13:52:29 +0000 Subject: [PATCH] Store millisecond timestamps as float instead of int to prevent int overflow issues on 32 bit based systems. Issue #43860 --- .../Component/Messenger/Transport/RedisExt/Connection.php | 8 ++++---- .../Messenger/Transport/RedisExt/RedisSender.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Component/Messenger/Transport/RedisExt/Connection.php b/src/Symfony/Component/Messenger/Transport/RedisExt/Connection.php index 4e372eecd72f8..ab9da222de7e3 100644 --- a/src/Symfony/Component/Messenger/Transport/RedisExt/Connection.php +++ b/src/Symfony/Component/Messenger/Transport/RedisExt/Connection.php @@ -248,7 +248,7 @@ public function reject(string $id): void } } - public function add(string $body, array $headers, int $delayInMs = 0): void + public function add(string $body, array $headers, float $delayInMs = 0): void { if ($this->autoSetup) { $this->setup(); @@ -267,7 +267,7 @@ public function add(string $body, array $headers, int $delayInMs = 0): void throw new TransportException(json_last_error_msg()); } - $score = $this->getCurrentTimeInMilliseconds() + $delayInMs; + $score = $this->getCurrentTimeInMilliseconds() + (float) $delayInMs; $added = $this->connection->zadd($this->queue, ['NX'], $score, $message); } else { $message = json_encode([ @@ -316,9 +316,9 @@ public function setup(): void $this->autoSetup = false; } - private function getCurrentTimeInMilliseconds(): int + private function getCurrentTimeInMilliseconds(): float { - return (int) (microtime(true) * 1000); + return microtime(true) * (float) 1000; } public function cleanup(): void diff --git a/src/Symfony/Component/Messenger/Transport/RedisExt/RedisSender.php b/src/Symfony/Component/Messenger/Transport/RedisExt/RedisSender.php index beda99687057d..ea853271af169 100644 --- a/src/Symfony/Component/Messenger/Transport/RedisExt/RedisSender.php +++ b/src/Symfony/Component/Messenger/Transport/RedisExt/RedisSender.php @@ -42,7 +42,7 @@ public function send(Envelope $envelope): Envelope $delayStamp = $envelope->last(DelayStamp::class); $delayInMs = null !== $delayStamp ? $delayStamp->getDelay() : 0; - $this->connection->add($encodedMessage['body'], $encodedMessage['headers'] ?? [], $delayInMs); + $this->connection->add($encodedMessage['body'], $encodedMessage['headers'] ?? [], (float) $delayInMs); return $envelope; }