From 39ba6043498c86c2d3d0233c462f3b9fe4c9af1b Mon Sep 17 00:00:00 2001 From: Ian Torres Date: Thu, 17 Jul 2025 14:33:45 -0400 Subject: [PATCH 1/2] Better code. --- src/Responses/ChannelsResponse.php | 6 ------ src/Responses/ConnectionsResponse.php | 5 ----- src/Responses/GetResponse.php | 19 ++----------------- src/Responses/ListResponse.php | 5 ----- src/Responses/QueryResponse.php | 21 ++++----------------- src/Responses/StatResponse.php | 6 ------ src/Responses/StatsResponse.php | 2 -- src/Responses/StatusResponse.php | 10 +--------- tests/ServiceTest.php | 2 +- 9 files changed, 8 insertions(+), 68 deletions(-) diff --git a/src/Responses/ChannelsResponse.php b/src/Responses/ChannelsResponse.php index 9eb6e7d..5f8ca6e 100644 --- a/src/Responses/ChannelsResponse.php +++ b/src/Responses/ChannelsResponse.php @@ -46,14 +46,8 @@ public function __construct(public string $data, public bool $status, public arr */ public static function fromBytes(string $data, ValueSize $size): ChannelsResponse|null { - $valueSize = $size->value; $offset = 0; - // Less than 1 byte? not enough for status. - if (strlen($data) < 1) { - return null; - } - $status = ord($data[$offset]) === 1; $offset++; diff --git a/src/Responses/ConnectionsResponse.php b/src/Responses/ConnectionsResponse.php index 72c0300..34b075d 100644 --- a/src/Responses/ConnectionsResponse.php +++ b/src/Responses/ConnectionsResponse.php @@ -74,11 +74,6 @@ public static function fromBytes(string $data, ValueSize $size): ConnectionsResp { $offset = 0; - // Less than 1 byte? not enough for status. - if (strlen($data) < 1) { - return null; - } - $status = ord($data[$offset]) === 1; $offset++; diff --git a/src/Responses/GetResponse.php b/src/Responses/GetResponse.php index 61b5da6..b97d679 100644 --- a/src/Responses/GetResponse.php +++ b/src/Responses/GetResponse.php @@ -51,41 +51,26 @@ public static function fromBytes(string $data, ValueSize $size): GetResponse|nul $valueSize = $size->value; $offset = 0; - // Less than 1 byte? not enough for status. - if (strlen($data) < 1) { - return null; - } - $status = ord($data[$offset]) === 1; $offset++; if ($status) { // Less than 2 bytes? not enough for ttl type. - if (strlen($data) < 2) { + if (strlen($data) < $offset + 1 + $valueSize * 2) { return null; } $ttl_type = TTLType::from(ord($data[$offset])); $offset++; - // Less than 2 + N bytes? not enough for ttl. - if (strlen($data) < 2 + $valueSize) { - return null; - } - $ttl = unpack(BaseRequest::pack($size), substr($data, $offset, $valueSize))[1]; $offset += $valueSize; - // Less than 2 + 2 * N bytes? not enough for value size. - if (strlen($data) < 2 + ($valueSize * 2)) { - return null; - } - $value_sized = unpack(BaseRequest::pack($size), substr($data, $offset, $valueSize))[1]; $offset += $valueSize; // Less than 2 + 2 * N + O bytes? not enough for value. - if (strlen($data) < 2 + ($valueSize * 2) + $value_sized) { + if (strlen($data) < $offset + $value_sized) { return null; } diff --git a/src/Responses/ListResponse.php b/src/Responses/ListResponse.php index e6cf47b..8bcda3e 100644 --- a/src/Responses/ListResponse.php +++ b/src/Responses/ListResponse.php @@ -49,11 +49,6 @@ public static function fromBytes(string $data, ValueSize $size): ListResponse|nu { $offset = 0; - // Less than 1 byte? not enough for status. - if (strlen($data) < 1) { - return null; - } - $status = ord($data[$offset]) === 1; $offset++; diff --git a/src/Responses/QueryResponse.php b/src/Responses/QueryResponse.php index 1e4bc4e..3efec25 100644 --- a/src/Responses/QueryResponse.php +++ b/src/Responses/QueryResponse.php @@ -51,36 +51,23 @@ public static function fromBytes(string $data, ValueSize $size): QueryResponse|n $valueSize = $size->value; $offset = 0; - // Less than 1 byte? not enough for status. - if (strlen($data) < 1) { - return null; - } - $status = ord($data[$offset]) === 1; $offset++; if ($status) { - // Less than 1 + N bytes? not enough for quota. - if (strlen($data) < 1 + $valueSize) { + if (strlen($data) < $offset + + $valueSize * 2 + // quota and ttl + 1 // ttl type + ) { return null; } $quota = unpack(BaseRequest::pack($size), substr($data, $offset, $valueSize))[1]; $offset += $size->value; - // Less than 2 + N bytes? not enough for ttl type. - if (strlen($data) < 2 + $valueSize) { - return null; - } - $ttl_type = TTLType::from(ord($data[$offset])); $offset++; - // Less than 2 + 2N bytes? not enough for ttl. - if (strlen($data) < 2 + ($valueSize * 2)) { - return null; - } - $ttl = unpack(BaseRequest::pack($size), substr($data, $offset, $valueSize))[1]; return new QueryResponse($data, true, $quota, $ttl_type, $ttl); } diff --git a/src/Responses/StatResponse.php b/src/Responses/StatResponse.php index 95d2d56..e94eee1 100644 --- a/src/Responses/StatResponse.php +++ b/src/Responses/StatResponse.php @@ -46,14 +46,8 @@ public function __construct(public string $data, public bool $status, public arr */ public static function fromBytes(string $data, ValueSize $size): StatResponse|null { - $valueSize = $size->value; $offset = 0; - // Less than 1 byte? not enough for status. - if (strlen($data) < 1) { - return null; - } - $status = ord($data[$offset]) === 1; $offset++; diff --git a/src/Responses/StatsResponse.php b/src/Responses/StatsResponse.php index ee6d3b5..f800977 100644 --- a/src/Responses/StatsResponse.php +++ b/src/Responses/StatsResponse.php @@ -48,7 +48,6 @@ public function __construct(public string $data, public bool $status, public arr */ public static function fromBytes(string $data, ValueSize $size): StatsResponse|null { - $valueSize = $size->value; $offset = 0; // Less than 1 byte? not enough for status. @@ -80,7 +79,6 @@ public static function fromBytes(string $data, ValueSize $size): StatsResponse|n return null; } - $fragment = unpack(BaseRequest::pack(ValueSize::UINT64), substr($data, $offset, ValueSize::UINT64->value))[1]; $offset += ValueSize::UINT64->value; // Less than offset + 8 bytes? not enough for fragment keys count. diff --git a/src/Responses/StatusResponse.php b/src/Responses/StatusResponse.php index 2078ef3..1c6f84c 100644 --- a/src/Responses/StatusResponse.php +++ b/src/Responses/StatusResponse.php @@ -40,14 +40,6 @@ public function __construct(public string $data, public bool $status) */ public static function fromBytes(string $data, ValueSize $size): StatusResponse|null { - $offset = 0; - - // Less than 1 byte? not enough for status. - if (strlen($data) < 1) { - return null; - } - - $status = ord($data[$offset]) === 1; - return new StatusResponse($data, $status); + return new StatusResponse($data, ord($data[$offset]) === 1); } } diff --git a/tests/ServiceTest.php b/tests/ServiceTest.php index 2db0267..63ea785 100644 --- a/tests/ServiceTest.php +++ b/tests/ServiceTest.php @@ -432,7 +432,7 @@ public function testWhoami() { $this->prepares(function (Service $service) { $whoami = $service->whoami(); $this->assertTrue($whoami->status); - $this->assertTrue(strlen($whoami->id) == 32); + $this->assertEquals(32, strlen($whoami->id)); }); } From 5d08fe6843958a38652116343846957780f79b66 Mon Sep 17 00:00:00 2001 From: Ian Torres Date: Thu, 17 Jul 2025 14:36:02 -0400 Subject: [PATCH 2/2] Fixed. --- src/Responses/StatusResponse.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Responses/StatusResponse.php b/src/Responses/StatusResponse.php index 1c6f84c..40b82d2 100644 --- a/src/Responses/StatusResponse.php +++ b/src/Responses/StatusResponse.php @@ -40,6 +40,6 @@ public function __construct(public string $data, public bool $status) */ public static function fromBytes(string $data, ValueSize $size): StatusResponse|null { - return new StatusResponse($data, ord($data[$offset]) === 1); + return new StatusResponse($data, ord($data[0]) === 1); } }