mirror of
https://github.com/predis/predis.git
synced 2026-09-13 11:57:02 +00:00
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:
@@ -4,6 +4,7 @@
|
||||
### Added
|
||||
### Changed
|
||||
### Fixed
|
||||
- Fixed RESP3 double parsing returning positive `INF` for `-inf` payloads (#1716)
|
||||
|
||||
## v3.6.0 (2026-08-14)
|
||||
### Added
|
||||
|
||||
@@ -63,10 +63,14 @@ class Resp3Strategy extends Resp2Strategy
|
||||
*/
|
||||
protected function parseDouble(string $string): float
|
||||
{
|
||||
if ($string === 'inf' || $string === '-inf') {
|
||||
if ($string === 'inf') {
|
||||
return INF;
|
||||
}
|
||||
|
||||
if ($string === '-inf') {
|
||||
return -INF;
|
||||
}
|
||||
|
||||
return (float) $string;
|
||||
}
|
||||
|
||||
|
||||
@@ -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],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user