Fix RESP3 double parsing returning positive INF for -inf (#1716)

parseDouble() returned positive INF for the RESP3 payload ',-inf',
inverting the sign. The value is reachable with protocol=3, for
example ZSCORE on a member whose score is -inf.

The existing infinity test asserted only is_infinite(), which cannot
detect the sign inversion, so it now checks exact values.

NaN payloads keep their current behavior; that is addressed
separately.
This commit is contained in:
Sergey Sannikov
2026-08-27 17:46:39 +04:00
committed by GitHub
parent 0795d69d9e
commit 675951360f
3 changed files with 10 additions and 5 deletions
@@ -60,11 +60,11 @@ class Resp3StrategyTest extends PredisTestCase
* @param string $data
* @return void
*/
public function testParseDataReturnsFloatInfinityOnInfinityOrNegativeInfinity(string $data): void
public function testParseDataReturnsFloatInfinityOnInfinityOrNegativeInfinity(string $data, float $expectedValue): void
{
$actualResponse = $this->strategy->parseData($data);
$this->assertInfinite($actualResponse);
$this->assertSame($expectedValue, $actualResponse);
}
/**
@@ -166,8 +166,8 @@ class Resp3StrategyTest extends PredisTestCase
public function infinityProvider(): array
{
return [
'positive infinity' => [",inf\r\n"],
'negative infinity' => [",-inf\r\n"],
'positive infinity' => [",inf\r\n", INF],
'negative infinity' => [",-inf\r\n", -INF],
];
}