diff options
| author | 2024-01-15 10:36:30 +0100 | |
|---|---|---|
| committer | 2024-01-15 10:36:30 +0100 | |
| commit | 314077a457f04cc2f0472e036af029e2676fbf02 (patch) | |
| tree | 1f38bb78761a56b8ee2034caba0dbda3912ef7c1 /lib | |
| parent | 52f6c8399b41e0c8be49dd56c89f451843189791 (diff) | |
PHPStan prepare exceptions (#6037)
Take advantage of
https://phpstan.org/blog/bring-your-exceptions-under-control
Minimum changes to pass `tooWideThrowType` and `implicitThrows`.
Revert some mistakes from:
https://github.com/FreshRSS/FreshRSS/pull/5504
Preparation needed before new PRs of the same type:
https://github.com/FreshRSS/FreshRSS/pull/5962
Fix several wrong PHPDocs and catches:
> Method ... has ...Exception in PHPDoc @throws tag but it's not thrown.
> Dead catch - ...Exception is never thrown in the try block.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/Minz/Configuration.php | 3 | ||||
| -rw-r--r-- | lib/Minz/Exception.php | 10 | ||||
| -rw-r--r-- | lib/Minz/ExtensionManager.php | 1 | ||||
| -rw-r--r-- | lib/Minz/Log.php | 4 | ||||
| -rw-r--r-- | lib/Minz/Mailer.php | 1 | ||||
| -rw-r--r-- | lib/Minz/ModelArray.php | 7 | ||||
| -rw-r--r-- | lib/Minz/ModelPdo.php | 2 | ||||
| -rw-r--r-- | lib/Minz/Pdo.php | 15 | ||||
| -rw-r--r-- | lib/Minz/PdoMysql.php | 6 | ||||
| -rw-r--r-- | lib/Minz/PdoPgsql.php | 5 | ||||
| -rw-r--r-- | lib/Minz/PdoSqlite.php | 6 | ||||
| -rw-r--r-- | lib/Minz/Request.php | 2 | ||||
| -rw-r--r-- | lib/Minz/Url.php | 11 | ||||
| -rw-r--r-- | lib/Minz/View.php | 1 | ||||
| -rw-r--r-- | lib/favicons.php | 16 | ||||
| -rw-r--r-- | lib/lib_install.php | 3 | ||||
| -rw-r--r-- | lib/lib_rss.php | 13 |
17 files changed, 66 insertions, 40 deletions
diff --git a/lib/Minz/Configuration.php b/lib/Minz/Configuration.php index 18fa6e7df..5c3a8ade0 100644 --- a/lib/Minz/Configuration.php +++ b/lib/Minz/Configuration.php @@ -27,6 +27,7 @@ class Minz_Configuration { * @param string $config_filename the filename of the configuration * @param string $default_filename a filename containing default values for the configuration * @param Minz_ConfigurationSetterInterface $configuration_setter an optional helper to set values in configuration + * @throws Minz_FileNotExistException */ public static function register(string $namespace, string $config_filename, string $default_filename = null, Minz_ConfigurationSetterInterface $configuration_setter = null): void { @@ -103,6 +104,7 @@ class Minz_Configuration { * @param string $config_filename the file containing configuration values. * @param string $default_filename the file containing default values, null by default. * @param Minz_ConfigurationSetterInterface $configuration_setter an optional helper to set values in configuration + * @throws Minz_FileNotExistException */ private final function __construct(string $namespace, string $config_filename, string $default_filename = null, Minz_ConfigurationSetterInterface $configuration_setter = null) { @@ -153,7 +155,6 @@ class Minz_Configuration { * @param string $key the name of the param. * @param mixed $default default value to return if key does not exist. * @return array|mixed value corresponding to the key. - * @throws Minz_ConfigurationParamException if the param does not exist */ public function param(string $key, $default = null) { if (isset($this->data[$key])) { diff --git a/lib/Minz/Exception.php b/lib/Minz/Exception.php index c306a14ca..283b28f4e 100644 --- a/lib/Minz/Exception.php +++ b/lib/Minz/Exception.php @@ -6,13 +6,13 @@ class Minz_Exception extends Exception { const WARNING = 10; const NOTICE = 20; - public function __construct(string $message, int $code = self::ERROR) { - if ($code != Minz_Exception::ERROR - && $code != Minz_Exception::WARNING - && $code != Minz_Exception::NOTICE) { + public function __construct(string $message = '', int $code = self::ERROR, ?Throwable $previous = null) { + if ($code !== Minz_Exception::ERROR + && $code !== Minz_Exception::WARNING + && $code !== Minz_Exception::NOTICE) { $code = Minz_Exception::ERROR; } - parent::__construct ($message, $code); + parent::__construct($message, $code, $previous); } } diff --git a/lib/Minz/ExtensionManager.php b/lib/Minz/ExtensionManager.php index 27e09b97a..d9e38955b 100644 --- a/lib/Minz/ExtensionManager.php +++ b/lib/Minz/ExtensionManager.php @@ -118,6 +118,7 @@ final class Minz_ExtensionManager { * extension.php should contain at least a class named <name>Extension where * <name> must match with the entry point in metadata.json. This class must * inherit from Minz_Extension class. + * @throws Minz_ConfigurationNamespaceException */ public static function init(): void { self::reset(); diff --git a/lib/Minz/Log.php b/lib/Minz/Log.php index 272f62f6b..4b884ae3b 100644 --- a/lib/Minz/Log.php +++ b/lib/Minz/Log.php @@ -102,16 +102,20 @@ class Minz_Log { /** * Some helpers to Minz_Log::record() method * Parameters are the same of those of the record() method. + * @throws Minz_PermissionDeniedException */ public static function debug(string $msg, ?string $file_name = null): void { self::record($msg, LOG_DEBUG, $file_name); } + /** @throws Minz_PermissionDeniedException */ public static function notice(string $msg, ?string $file_name = null): void { self::record($msg, LOG_NOTICE, $file_name); } + /** @throws Minz_PermissionDeniedException */ public static function warning(string $msg, ?string $file_name = null): void { self::record($msg, LOG_WARNING, $file_name); } + /** @throws Minz_PermissionDeniedException */ public static function error(string $msg, ?string $file_name = null): void { self::record($msg, LOG_ERR, $file_name); } diff --git a/lib/Minz/Mailer.php b/lib/Minz/Mailer.php index 86c5c33da..8e1211807 100644 --- a/lib/Minz/Mailer.php +++ b/lib/Minz/Mailer.php @@ -41,6 +41,7 @@ class Minz_Mailer { /** * @phpstan-param class-string|'' $viewType * @param string $viewType Name of the class (inheriting from Minz_View) to use for the view model + * @throws Minz_ConfigurationException */ public function __construct(string $viewType = '') { $view = null; diff --git a/lib/Minz/ModelArray.php b/lib/Minz/ModelArray.php index 090536623..f12e23567 100644 --- a/lib/Minz/ModelArray.php +++ b/lib/Minz/ModelArray.php @@ -24,7 +24,11 @@ class Minz_ModelArray { $this->filename = $filename; } - /** @return array<string,mixed> */ + /** + * @return array<string,mixed> + * @throws Minz_FileNotExistException + * @throws Minz_PermissionDeniedException + */ protected function loadArray(): array { if (!file_exists($this->filename)) { throw new Minz_FileNotExistException($this->filename, Minz_Exception::WARNING); @@ -46,6 +50,7 @@ class Minz_ModelArray { /** * Sauve le tableau $array dans le fichier $filename * @param array<string,mixed> $array + * @throws Minz_PermissionDeniedException */ protected function writeArray(array $array): bool { if (file_put_contents($this->filename, "<?php\n return " . var_export($array, true) . ';', LOCK_EX) === false) { diff --git a/lib/Minz/ModelPdo.php b/lib/Minz/ModelPdo.php index b107d3df9..69a619833 100644 --- a/lib/Minz/ModelPdo.php +++ b/lib/Minz/ModelPdo.php @@ -86,7 +86,7 @@ class Minz_ModelPdo { * HOST, BASE, USER and PASS variables defined in the configuration file * @param string|null $currentUser * @param Minz_Pdo|null $currentPdo - * @throws Minz_ConfigurationNamespaceException + * @throws Minz_ConfigurationException * @throws Minz_PDOConnectionException */ public function __construct(?string $currentUser = null, ?Minz_Pdo $currentPdo = null) { diff --git a/lib/Minz/Pdo.php b/lib/Minz/Pdo.php index 3d613e832..2f053c2af 100644 --- a/lib/Minz/Pdo.php +++ b/lib/Minz/Pdo.php @@ -7,7 +7,10 @@ declare(strict_types=1); */ abstract class Minz_Pdo extends PDO { - /** @param array<int,int|string|bool>|null $options */ + /** + * @param array<int,int|string|bool>|null $options + * @throws PDOException + */ public function __construct(string $dsn, ?string $username = null, ?string $passwd = null, ?array $options = null) { parent::__construct($dsn, $username, $passwd, $options); $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); @@ -38,6 +41,7 @@ abstract class Minz_Pdo extends PDO { /** * @param string|null $name * @return string|false + * @throws PDOException if the attribute `PDO::ATTR_ERRMODE` is set to `PDO::ERRMODE_EXCEPTION` */ #[\ReturnTypeWillChange] public function lastInsertId($name = null) { @@ -52,6 +56,7 @@ abstract class Minz_Pdo extends PDO { * @param string $query * @param array<int,string> $options * @return PDOStatement|false + * @throws PDOException if the attribute `PDO::ATTR_ERRMODE` is set to `PDO::ERRMODE_EXCEPTION` * @phpstan-ignore-next-line */ #[\ReturnTypeWillChange] @@ -64,6 +69,8 @@ abstract class Minz_Pdo extends PDO { /** * @param string $statement * @return int|false + * @throws PDOException if the attribute `PDO::ATTR_ERRMODE` is set to `PDO::ERRMODE_EXCEPTION` + * @phpstan-ignore-next-line */ #[\ReturnTypeWillChange] public function exec($statement) { @@ -71,7 +78,11 @@ abstract class Minz_Pdo extends PDO { return parent::exec($statement); } - /** @return PDOStatement|false */ + /** + * @return PDOStatement|false + * @throws PDOException if the attribute `PDO::ATTR_ERRMODE` is set to `PDO::ERRMODE_EXCEPTION` + * @phpstan-ignore-next-line + */ #[\ReturnTypeWillChange] public function query(string $query, ?int $fetch_mode = null, ...$fetch_mode_args) { $query = $this->preSql($query); diff --git a/lib/Minz/PdoMysql.php b/lib/Minz/PdoMysql.php index 0171141ba..a6d927308 100644 --- a/lib/Minz/PdoMysql.php +++ b/lib/Minz/PdoMysql.php @@ -7,7 +7,10 @@ declare(strict_types=1); */ class Minz_PdoMysql extends Minz_Pdo { - /** @param array<int,int|string|bool>|null $options */ + /** + * @param array<int,int|string|bool>|null $options + * @throws PDOException + */ public function __construct(string $dsn, ?string $username = null, ?string $passwd = null, ?array $options = null) { parent::__construct($dsn, $username, $passwd, $options); $this->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); @@ -20,6 +23,7 @@ class Minz_PdoMysql extends Minz_Pdo { /** * @param string|null $name * @return string|false + * @throws PDOException if the attribute `PDO::ATTR_ERRMODE` is set to `PDO::ERRMODE_EXCEPTION` */ #[\ReturnTypeWillChange] public function lastInsertId($name = null) { diff --git a/lib/Minz/PdoPgsql.php b/lib/Minz/PdoPgsql.php index 2abf168d9..f60dd695f 100644 --- a/lib/Minz/PdoPgsql.php +++ b/lib/Minz/PdoPgsql.php @@ -7,7 +7,10 @@ declare(strict_types=1); */ class Minz_PdoPgsql extends Minz_Pdo { - /** @param array<int,int|string|bool>|null $options */ + /** + * @param array<int,int|string|bool>|null $options + * @throws PDOException + */ public function __construct(string $dsn, ?string $username = null, ?string $passwd = null, ?array $options = null) { parent::__construct($dsn, $username, $passwd, $options); $this->exec("SET NAMES 'UTF8';"); diff --git a/lib/Minz/PdoSqlite.php b/lib/Minz/PdoSqlite.php index 1fd5c8d7a..cecc68a64 100644 --- a/lib/Minz/PdoSqlite.php +++ b/lib/Minz/PdoSqlite.php @@ -7,7 +7,10 @@ declare(strict_types=1); */ class Minz_PdoSqlite extends Minz_Pdo { - /** @param array<int,int|string|bool>|null $options */ + /** + * @param array<int,int|string|bool>|null $options + * @throws PDOException + */ public function __construct(string $dsn, ?string $username = null, ?string $passwd = null, ?array $options = null) { parent::__construct($dsn, $username, $passwd, $options); $this->exec('PRAGMA foreign_keys = ON;'); @@ -20,6 +23,7 @@ class Minz_PdoSqlite extends Minz_Pdo { /** * @param string|null $name * @return string|false + * @throws PDOException if the attribute `PDO::ATTR_ERRMODE` is set to `PDO::ERRMODE_EXCEPTION` */ #[\ReturnTypeWillChange] public function lastInsertId($name = null) { diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php index 80d503048..9bf1ff4fb 100644 --- a/lib/Minz/Request.php +++ b/lib/Minz/Request.php @@ -283,6 +283,7 @@ class Minz_Request { /** * Return the base_url from configuration + * @throws Minz_ConfigurationException */ public static function getBaseUrl(): string { $conf = Minz_Configuration::get('system'); @@ -382,6 +383,7 @@ class Minz_Request { * Restart a request * @param array{'c'?:string,'a'?:string,'params'?:array<string,mixed>} $url an array presentation of the URL to route to * @param bool $redirect If true, uses an HTTP redirection, and if false (default), performs an internal dispatcher redirection. + * @throws Minz_ConfigurationException */ public static function forward($url = [], bool $redirect = false): void { if (empty(Minz_Request::originalRequest())) { diff --git a/lib/Minz/Url.php b/lib/Minz/Url.php index 2104759cd..67b927f05 100644 --- a/lib/Minz/Url.php +++ b/lib/Minz/Url.php @@ -15,6 +15,7 @@ class Minz_Url { * @param string $encoding how to encode & (& ou & pour html) * @param bool|string $absolute * @return string Formatted URL + * @throws Minz_ConfigurationException */ public static function display($url = [], string $encoding = 'html', $absolute = false): string { $isArray = is_array($url); @@ -140,13 +141,9 @@ class Minz_Url { * @return array<string,string|array<string,string>> */ public static function unserialize(string $url = ''): array { - try { - $result = json_decode(base64_decode($url, true) ?: '', true, JSON_THROW_ON_ERROR) ?? []; - /** @var array{'c'?:string,'a'?:string,'params'?:array<string,mixed>} $result */ - return $result; - } catch (\Throwable $exception) { - return []; - } + $result = json_decode(base64_decode($url, true) ?: '', true, JSON_THROW_ON_ERROR) ?? []; + /** @var array{'c'?:string,'a'?:string,'params'?:array<string,mixed>} $result */ + return $result; } /** diff --git a/lib/Minz/View.php b/lib/Minz/View.php index c215ecdab..5b1518a84 100644 --- a/lib/Minz/View.php +++ b/lib/Minz/View.php @@ -30,6 +30,7 @@ class Minz_View { /** * Determines if a layout is used or not + * @throws Minz_ConfigurationException */ public function __construct() { $this->_layout(self::LAYOUT_DEFAULT); diff --git a/lib/favicons.php b/lib/favicons.php index df893b309..48b649c28 100644 --- a/lib/favicons.php +++ b/lib/favicons.php @@ -13,16 +13,12 @@ function isImgMime(string $content): bool { return true; } $isImage = true; - try { - /** @var finfo $fInfo */ - $fInfo = finfo_open(FILEINFO_MIME_TYPE); - /** @var string $content */ - $content = finfo_buffer($fInfo, $content); - $isImage = strpos($content, 'image') !== false; - finfo_close($fInfo); - } catch (Exception $e) { - syslog(LOG_WARNING, 'FreshRSS favicon error: ' . $e->getMessage()); - } + /** @var finfo $fInfo */ + $fInfo = finfo_open(FILEINFO_MIME_TYPE); + /** @var string $content */ + $content = finfo_buffer($fInfo, $content); + $isImage = strpos($content, 'image') !== false; + finfo_close($fInfo); return $isImage; } diff --git a/lib/lib_install.php b/lib/lib_install.php index f36d2eaa6..76ba1b459 100644 --- a/lib/lib_install.php +++ b/lib/lib_install.php @@ -76,6 +76,9 @@ function generateSalt(): string { return sha1(uniqid('' . mt_rand(), true).implode('', stat(__FILE__) ?: [])); } +/** + * @throws FreshRSS_Context_Exception + */ function initDb(): string { $db = FreshRSS_Context::systemConf()->db; if (empty($db['pdo_options'])) { diff --git a/lib/lib_rss.php b/lib/lib_rss.php index fa02c50eb..62fe87375 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -580,6 +580,7 @@ function max_registrations_reached(): bool { * * @param string $username the name of the user of which we want the configuration. * @return FreshRSS_UserConfiguration|null object, or null if the configuration cannot be loaded. + * @throws Minz_ConfigurationNamespaceException */ function get_user_configuration(string $username): ?FreshRSS_UserConfiguration { if (!FreshRSS_user_Controller::checkUsername($username)) { @@ -590,9 +591,6 @@ function get_user_configuration(string $username): ?FreshRSS_UserConfiguration { FreshRSS_UserConfiguration::register($namespace, USERS_PATH . '/' . $username . '/config.php', FRESHRSS_PATH . '/config-user.default.php'); - } catch (Minz_ConfigurationNamespaceException $e) { - // namespace already exists, do nothing. - Minz_Log::warning($e->getMessage(), ADMIN_LOG); } catch (Minz_FileNotExistException $e) { Minz_Log::warning($e->getMessage(), ADMIN_LOG); return null; @@ -706,13 +704,8 @@ function httpAuthUser(bool $onlyTrusted = true): string { } function cryptAvailable(): bool { - try { - $hash = '$2y$04$usesomesillystringfore7hnbRJHxXVLeakoG8K30oukPsA.ztMG'; - return $hash === @crypt('password', $hash); - } catch (Exception $e) { - Minz_Log::warning($e->getMessage()); - } - return false; + $hash = '$2y$04$usesomesillystringfore7hnbRJHxXVLeakoG8K30oukPsA.ztMG'; + return $hash === @crypt('password', $hash); } |
