diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 3ff7240b1..8fb418d2c 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -610,41 +610,11 @@ parameters: count: 1 path: program/lib/Roundcube/cache/db.php - - - message: "#^Negated boolean expression is always false\\.$#" - count: 3 - path: program/lib/Roundcube/cache/memcache.php - - message: "#^Offset non\\-falsy\\-string does not exist on array\\{\\}\\.$#" count: 1 path: program/lib/Roundcube/cache/memcache.php - - - message: "#^Static property rcube_cache_memcache\\:\\:\\$memcache \\(Memcache\\) does not accept false\\.$#" - count: 2 - path: program/lib/Roundcube/cache/memcache.php - - - - message: "#^Method rcube_cache_memcached\\:\\:engine\\(\\) should return Memcache but returns Memcached\\.$#" - count: 1 - path: program/lib/Roundcube/cache/memcached.php - - - - message: "#^Method rcube_cache_memcached\\:\\:engine\\(\\) should return Memcache but returns Memcached\\|false\\.$#" - count: 1 - path: program/lib/Roundcube/cache/memcached.php - - - - message: "#^Negated boolean expression is always false\\.$#" - count: 3 - path: program/lib/Roundcube/cache/memcached.php - - - - message: "#^Static property rcube_cache_memcached\\:\\:\\$memcache \\(Memcached\\) does not accept false\\.$#" - count: 2 - path: program/lib/Roundcube/cache/memcached.php - - message: "#^Call to function method_exists\\(\\) with Redis and 'del' will always evaluate to true\\.$#" count: 1 @@ -760,11 +730,6 @@ parameters: count: 1 path: program/lib/Roundcube/rcube.php - - - message: "#^Property rcube\\:\\:\\$memcached \\(Memcached\\|null\\) does not accept Memcache\\.$#" - count: 1 - path: program/lib/Roundcube/rcube.php - - message: "#^Property rcube\\:\\:\\$plugins \\(rcube_plugin_api\\) does not accept rcube_dummy_plugin_api\\.$#" count: 1 @@ -1630,131 +1595,6 @@ parameters: count: 1 path: program/lib/Roundcube/rcube_washtml.php - - - message: "#^Parameter \\#1 \\$key \\(string\\) of method rcube_session_db\\:\\:save\\(\\) should be contravariant with parameter \\$key \\(mixed\\) of method rcube_session\\:\\:save\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/db.php - - - - message: "#^Parameter \\#1 \\$key \\(string\\) of method rcube_session_db\\:\\:update\\(\\) should be contravariant with parameter \\$key \\(mixed\\) of method rcube_session\\:\\:update\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/db.php - - - - message: "#^Parameter \\#2 \\$newvars \\(string\\) of method rcube_session_db\\:\\:update\\(\\) should be contravariant with parameter \\$newvars \\(mixed\\) of method rcube_session\\:\\:update\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/db.php - - - - message: "#^Parameter \\#2 \\$vars \\(string\\) of method rcube_session_db\\:\\:save\\(\\) should be contravariant with parameter \\$vars \\(mixed\\) of method rcube_session\\:\\:save\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/db.php - - - - message: "#^Parameter \\#3 \\$oldvars \\(string\\) of method rcube_session_db\\:\\:update\\(\\) should be contravariant with parameter \\$oldvars \\(mixed\\) of method rcube_session\\:\\:update\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/db.php - - - - message: "#^Negated boolean expression is always false\\.$#" - count: 1 - path: program/lib/Roundcube/session/memcache.php - - - - message: "#^Parameter \\#1 \\$key \\(string\\) of method rcube_session_memcache\\:\\:save\\(\\) should be contravariant with parameter \\$key \\(mixed\\) of method rcube_session\\:\\:save\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/memcache.php - - - - message: "#^Parameter \\#1 \\$key \\(string\\) of method rcube_session_memcache\\:\\:update\\(\\) should be contravariant with parameter \\$key \\(mixed\\) of method rcube_session\\:\\:update\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/memcache.php - - - - message: "#^Parameter \\#2 \\$newvars \\(string\\) of method rcube_session_memcache\\:\\:update\\(\\) should be contravariant with parameter \\$newvars \\(mixed\\) of method rcube_session\\:\\:update\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/memcache.php - - - - message: "#^Parameter \\#2 \\$vars \\(string\\) of method rcube_session_memcache\\:\\:save\\(\\) should be contravariant with parameter \\$vars \\(mixed\\) of method rcube_session\\:\\:save\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/memcache.php - - - - message: "#^Parameter \\#3 \\$oldvars \\(string\\) of method rcube_session_memcache\\:\\:update\\(\\) should be contravariant with parameter \\$oldvars \\(mixed\\) of method rcube_session\\:\\:update\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/memcache.php - - - - message: "#^Negated boolean expression is always false\\.$#" - count: 1 - path: program/lib/Roundcube/session/memcached.php - - - - message: "#^Parameter \\#1 \\$key \\(string\\) of method rcube_session_memcached\\:\\:save\\(\\) should be contravariant with parameter \\$key \\(mixed\\) of method rcube_session\\:\\:save\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/memcached.php - - - - message: "#^Parameter \\#1 \\$key \\(string\\) of method rcube_session_memcached\\:\\:update\\(\\) should be contravariant with parameter \\$key \\(mixed\\) of method rcube_session\\:\\:update\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/memcached.php - - - - message: "#^Parameter \\#2 \\$newvars \\(string\\) of method rcube_session_memcached\\:\\:update\\(\\) should be contravariant with parameter \\$newvars \\(mixed\\) of method rcube_session\\:\\:update\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/memcached.php - - - - message: "#^Parameter \\#2 \\$vars \\(string\\) of method rcube_session_memcached\\:\\:save\\(\\) should be contravariant with parameter \\$vars \\(mixed\\) of method rcube_session\\:\\:save\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/memcached.php - - - - message: "#^Parameter \\#3 \\$oldvars \\(string\\) of method rcube_session_memcached\\:\\:update\\(\\) should be contravariant with parameter \\$oldvars \\(mixed\\) of method rcube_session\\:\\:update\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/memcached.php - - - - message: "#^Call to function method_exists\\(\\) with Redis and 'del' will always evaluate to true\\.$#" - count: 1 - path: program/lib/Roundcube/session/redis.php - - - - message: "#^Negated boolean expression is always false\\.$#" - count: 1 - path: program/lib/Roundcube/session/redis.php - - - - message: "#^Parameter \\#1 \\$key \\(string\\) of method rcube_session_redis\\:\\:save\\(\\) should be contravariant with parameter \\$key \\(mixed\\) of method rcube_session\\:\\:save\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/redis.php - - - - message: "#^Parameter \\#1 \\$key \\(string\\) of method rcube_session_redis\\:\\:update\\(\\) should be contravariant with parameter \\$key \\(mixed\\) of method rcube_session\\:\\:update\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/redis.php - - - - message: "#^Parameter \\#2 \\$newvars \\(string\\) of method rcube_session_redis\\:\\:update\\(\\) should be contravariant with parameter \\$newvars \\(mixed\\) of method rcube_session\\:\\:update\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/redis.php - - - - message: "#^Parameter \\#2 \\$vars \\(array\\) of method rcube_session_redis\\:\\:save\\(\\) should be contravariant with parameter \\$vars \\(mixed\\) of method rcube_session\\:\\:save\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/redis.php - - - - message: "#^Parameter \\#3 \\$oldvars \\(string\\) of method rcube_session_redis\\:\\:update\\(\\) should be contravariant with parameter \\$oldvars \\(mixed\\) of method rcube_session\\:\\:update\\(\\)$#" - count: 1 - path: program/lib/Roundcube/session/redis.php - - - - message: "#^Property rcube\\:\\:\\$storage \\(rcube_storage\\|null\\) does not accept StorageMock\\.$#" - count: 1 - path: tests/ActionTestCase.php - - message: "#^Parameter \\#1 \\$browser \\(Tests\\\\Browser\\\\Browser\\) of method Tests\\\\Browser\\\\Components\\\\App\\:\\:assert\\(\\) should be contravariant with parameter \\$browser \\(Laravel\\\\Dusk\\\\Browser\\) of method Laravel\\\\Dusk\\\\Component\\:\\:assert\\(\\)$#" count: 1 diff --git a/program/lib/Roundcube/cache/memcache.php b/program/lib/Roundcube/cache/memcache.php index 9f5165e03..26dfc7441 100644 --- a/program/lib/Roundcube/cache/memcache.php +++ b/program/lib/Roundcube/cache/memcache.php @@ -27,7 +27,7 @@ class rcube_cache_memcache extends rcube_cache /** * Instance of memcache handler * - * @var Memcache + * @var Memcache|false|null */ protected static $memcache; @@ -44,7 +44,7 @@ class rcube_cache_memcache extends rcube_cache /** * Get global handle for memcache access * - * @return Memcache + * @return Memcache|false */ public static function engine() { diff --git a/program/lib/Roundcube/cache/memcached.php b/program/lib/Roundcube/cache/memcached.php index fa8df6dc3..8197744f8 100644 --- a/program/lib/Roundcube/cache/memcached.php +++ b/program/lib/Roundcube/cache/memcached.php @@ -27,7 +27,7 @@ class rcube_cache_memcached extends rcube_cache /** * Instance of memcached handler * - * @var Memcached + * @var Memcached|false|null */ protected static $memcache; @@ -50,7 +50,7 @@ class rcube_cache_memcached extends rcube_cache /** * Get global handle for memcache access * - * @return Memcache + * @return Memcached|false */ public static function engine() { diff --git a/program/lib/Roundcube/cache/redis.php b/program/lib/Roundcube/cache/redis.php index 171e6ab0e..568d236d1 100644 --- a/program/lib/Roundcube/cache/redis.php +++ b/program/lib/Roundcube/cache/redis.php @@ -46,7 +46,7 @@ class rcube_cache_redis extends rcube_cache /** * Get global handle for redis access * - * @return Redis + * @return Redis|false */ public static function engine() { diff --git a/program/lib/Roundcube/rcube.php b/program/lib/Roundcube/rcube.php index c51bfbefe..c883cf539 100644 --- a/program/lib/Roundcube/rcube.php +++ b/program/lib/Roundcube/rcube.php @@ -44,13 +44,13 @@ class rcube /** @var ?rcube_db Instance of database class */ public $db; - /** @var ?Memcache Instance of Memcache class */ + /** @var Memcache|false|null Instance of Memcache class */ public $memcache; - /** @var ?Memcached Instance of Memcached class */ + /** @var Memcached|false|null Instance of Memcached class */ public $memcached; - /** @var ?Redis Instance of Redis class */ + /** @var Redis|false|null Instance of Redis class */ public $redis; /** @var ?rcube_session Instance of rcube_session class */ @@ -166,7 +166,7 @@ class rcube /** * Get global handle for memcache access * - * @return Memcache The memcache engine + * @return Memcache|false The memcache engine */ public function get_memcache() { @@ -180,7 +180,7 @@ class rcube /** * Get global handle for memcached access * - * @return Memcached The memcached engine + * @return Memcached|false The memcached engine */ public function get_memcached() { @@ -194,7 +194,7 @@ class rcube /** * Get global handle for redis access * - * @return Redis The redis engine + * @return Redis|false The redis engine */ public function get_redis() { diff --git a/program/lib/Roundcube/rcube_session.php b/program/lib/Roundcube/rcube_session.php index 33760959c..2b798e064 100644 --- a/program/lib/Roundcube/rcube_session.php +++ b/program/lib/Roundcube/rcube_session.php @@ -142,8 +142,25 @@ abstract class rcube_session implements SessionHandlerInterface #[ReturnTypeWillChange] abstract public function read($key); + /** + * Write data to the session store + * + * @param string $key Session identifier + * @param string $vars Session data + * + * @return bool True on success, False on failure + */ abstract protected function save($key, $vars); + /** + * Write data to the session store + * + * @param string $key Session identifier + * @param string $newvars New session data string + * @param string $oldvars Old session data string + * + * @return bool True on success, False on failure + */ abstract protected function update($key, $newvars, $oldvars); /** diff --git a/program/lib/Roundcube/session/memcache.php b/program/lib/Roundcube/session/memcache.php index 176746092..a498c86f4 100644 --- a/program/lib/Roundcube/session/memcache.php +++ b/program/lib/Roundcube/session/memcache.php @@ -25,7 +25,7 @@ */ class rcube_session_memcache extends rcube_session { - /** @var Memcache The memcache driver */ + /** @var Memcache|false|null The memcache driver */ private $memcache; /** @var bool Debug state */ diff --git a/program/lib/Roundcube/session/memcached.php b/program/lib/Roundcube/session/memcached.php index 6692f0181..a92dadf65 100644 --- a/program/lib/Roundcube/session/memcached.php +++ b/program/lib/Roundcube/session/memcached.php @@ -25,7 +25,7 @@ */ class rcube_session_memcached extends rcube_session { - /** @var Memcached The memcache driver */ + /** @var Memcached|false|null The memcache driver */ private $memcache; /** @var bool Debug state */ diff --git a/program/lib/Roundcube/session/php.php b/program/lib/Roundcube/session/php.php index 8bdeedf88..134f0829e 100644 --- a/program/lib/Roundcube/session/php.php +++ b/program/lib/Roundcube/session/php.php @@ -49,9 +49,15 @@ class rcube_session_php extends rcube_session return ''; } - protected function save($key, $vars) {} + protected function save($key, $vars) + { + return true; + } - protected function update($key, $newvars, $oldvars) {} + protected function update($key, $newvars, $oldvars) + { + return true; + } /** * Object constructor diff --git a/program/lib/Roundcube/session/redis.php b/program/lib/Roundcube/session/redis.php index e1f674542..acb103683 100644 --- a/program/lib/Roundcube/session/redis.php +++ b/program/lib/Roundcube/session/redis.php @@ -87,6 +87,7 @@ class rcube_session_redis extends rcube_session { if ($key) { try { + // @phpstan-ignore-next-line $result = method_exists($this->redis, 'del') ? $this->redis->del($key) : $this->redis->delete($key); @@ -171,7 +172,7 @@ class rcube_session_redis extends rcube_session * Write data to redis store * * @param string $key Session identifier - * @param array $vars Session data + * @param string $vars Session data * * @return bool True on success, False on failure */ diff --git a/tests/ActionTestCase.php b/tests/ActionTestCase.php index 7978ad79d..17222bb13 100644 --- a/tests/ActionTestCase.php +++ b/tests/ActionTestCase.php @@ -146,7 +146,7 @@ class ActionTestCase extends TestCase public static function mockStorage() { $rcmail = rcmail::get_instance(); - $rcmail->storage = new StorageMock(); + $rcmail->storage = new StorageMock(); // @phpstan-ignore-line return $rcmail->storage; }