aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2024-01-15 10:36:30 +0100
committerGravatar GitHub <noreply@github.com> 2024-01-15 10:36:30 +0100
commit314077a457f04cc2f0472e036af029e2676fbf02 (patch)
tree1f38bb78761a56b8ee2034caba0dbda3912ef7c1 /lib
parent52f6c8399b41e0c8be49dd56c89f451843189791 (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.php3
-rw-r--r--lib/Minz/Exception.php10
-rw-r--r--lib/Minz/ExtensionManager.php1
-rw-r--r--lib/Minz/Log.php4
-rw-r--r--lib/Minz/Mailer.php1
-rw-r--r--lib/Minz/ModelArray.php7
-rw-r--r--lib/Minz/ModelPdo.php2
-rw-r--r--lib/Minz/Pdo.php15
-rw-r--r--lib/Minz/PdoMysql.php6
-rw-r--r--lib/Minz/PdoPgsql.php5
-rw-r--r--lib/Minz/PdoSqlite.php6
-rw-r--r--lib/Minz/Request.php2
-rw-r--r--lib/Minz/Url.php11
-rw-r--r--lib/Minz/View.php1
-rw-r--r--lib/favicons.php16
-rw-r--r--lib/lib_install.php3
-rw-r--r--lib/lib_rss.php13
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 &amp; 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);
}