From be4e7b13403666fc477d4b563ea8c075d0fd2022 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov <noreply@fakecake.org> Date: Mon, 22 Feb 2021 14:41:09 +0300 Subject: [PATCH] fix several issues reported by phpstan --- api/index.php | 4 ++-- classes/api.php | 2 +- classes/digest.php | 9 --------- classes/feeds.php | 6 ------ classes/handler/public.php | 10 +++++----- classes/pluginhost.php | 3 ++- classes/pref/prefs.php | 7 ------- include/functions.php | 8 ++++---- include/sanity_check.php | 6 +++--- include/sanity_config.php | 4 ++-- include/sessions.php | 8 ++++---- phpstan.neon | 4 +++- plugins/af_fsckportal/init.php | 5 +---- plugins/af_redditimgur/init.php | 5 ++++- update.php | 4 ++-- utils/regen_config_checks.sh | 4 ++-- 16 files changed, 35 insertions(+), 54 deletions(-) diff --git a/api/index.php b/api/index.php index eb79422f9..1b713d561 100644 --- a/api/index.php +++ b/api/index.php @@ -18,8 +18,8 @@ require_once "functions.php"; require_once "sessions.php"; - ini_set('session.use_cookies', 0); - ini_set("session.gc_maxlifetime", 86400); + ini_set('session.use_cookies', "0"); + ini_set("session.gc_maxlifetime", "86400"); ob_start(); diff --git a/classes/api.php b/classes/api.php index 03eea1927..5677cb908 100755 --- a/classes/api.php +++ b/classes/api.php @@ -292,7 +292,7 @@ class API extends Handler { $sanitize_content = !isset($_REQUEST["sanitize"]) || self::_param_to_bool($_REQUEST["sanitize"]); - if ($article_ids) { + if (count($article_ids) > 0) { $article_qmarks = arr_qmarks($article_ids); diff --git a/classes/digest.php b/classes/digest.php index 77eb92c54..e0c23d705 100644 --- a/classes/digest.php +++ b/classes/digest.php @@ -1,12 +1,6 @@ <?php class Digest { - - /** - * Send by mail a digest of last articles. - * - * @return boolean Return false if digests are not enabled. - */ static function send_headlines_digests() { $user_limit = 15; // amount of users to process (e.g. emails to send out) @@ -81,9 +75,7 @@ class Digest } } } - Debug::log("All done."); - } static function prepare_headlines_digest($user_id, $days = 1, $limit = 1000) { @@ -210,5 +202,4 @@ class Digest return array($tmp, $headlines_count, $affected_ids, $tmp_t); } - } diff --git a/classes/feeds.php b/classes/feeds.php index 63b84edae..b59504c03 100755 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -1067,22 +1067,16 @@ class Feeds extends Handler_Protected { switch ($id) { case 0: return "archive"; - break; case -1: return "star"; - break; case -2: return "rss_feed"; - break; case -3: return "whatshot"; - break; case -4: return "inbox"; - break; case -6: return "restore"; - break; default: if ($id < LABEL_BASE_INDEX) { return "label"; diff --git a/classes/handler/public.php b/classes/handler/public.php index b0ce2306d..3910cf7c1 100755 --- a/classes/handler/public.php +++ b/classes/handler/public.php @@ -146,9 +146,9 @@ class Handler_Public extends Handler { $tpl->addBlock('enclosure'); } } else { - $tpl->setVariable('ARTICLE_ENCLOSURE_URL', null, true); - $tpl->setVariable('ARTICLE_ENCLOSURE_TYPE', null, true); - $tpl->setVariable('ARTICLE_ENCLOSURE_LENGTH', null, true); + $tpl->setVariable('ARTICLE_ENCLOSURE_URL', "", true); + $tpl->setVariable('ARTICLE_ENCLOSURE_TYPE', "", true); + $tpl->setVariable('ARTICLE_ENCLOSURE_LENGTH', "", true); } list ($og_image, $og_stream) = Article::_get_image($enclosures, $line['content'], $feed_site_url); @@ -207,8 +207,8 @@ class Handler_Public extends Handler { $article['content'] = Sanitizer::sanitize($line["content"], false, $owner_uid, $feed_site_url, false, $line["id"]); $article['updated'] = date('c', strtotime($line["updated"])); - if ($line['note']) $article['note'] = $line['note']; - if ($article['author']) $article['author'] = $line['author']; + if (!empty($line['note'])) $article['note'] = $line['note']; + if (!empty($line['author'])) $article['author'] = $line['author']; if (count($line["tags"]) > 0) { $article['tags'] = array(); diff --git a/classes/pluginhost.php b/classes/pluginhost.php index a05938111..5121c8491 100755 --- a/classes/pluginhost.php +++ b/classes/pluginhost.php @@ -108,8 +108,9 @@ class PluginHost { return false; } + // needed for compatibility with API 2 (?) function get_dbh() { - return Db::get(); + return false; } function get_pdo(): PDO { diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php index a26281fee..adb249dac 100644 --- a/classes/pref/prefs.php +++ b/classes/pref/prefs.php @@ -311,13 +311,6 @@ class Pref_Prefs extends Handler_Protected { <input dojoType='dijit.form.ValidationTextBox' name='email' required='1' value="<?= $email ?>"> </fieldset> - <?php if (!SINGLE_USER_MODE && !empty($_SESSION["hide_hello"])) { ?> - <fieldset> - <label><?= __('Access level:') ?></label> - <?= $access_level_names[$row["access_level"]] ?> - </fieldset> - <?php } ?> - <hr/> <button dojoType='dijit.form.Button' type='submit' class='alt-primary'> diff --git a/include/functions.php b/include/functions.php index 174ef39f0..bf9b374a2 100644 --- a/include/functions.php +++ b/include/functions.php @@ -34,8 +34,8 @@ error_reporting(E_ALL & ~E_NOTICE); } - ini_set('display_errors', 0); - ini_set('display_startup_errors', 0); + ini_set('display_errors', "false"); + ini_set('display_startup_errors', "false"); require_once 'config.php'; @@ -281,7 +281,7 @@ } else if (is_string($param)) { return trim(strip_tags($param)); } else { - return trim($param); + return $param; } } @@ -430,7 +430,7 @@ } function uniqid_short() { - return uniqid(base_convert(rand(), 10, 36)); + return uniqid(base_convert((string)rand(), 10, 36)); } function T_sprintf() { diff --git a/include/sanity_check.php b/include/sanity_check.php index 9407b606f..2786f012f 100755 --- a/include/sanity_check.php +++ b/include/sanity_check.php @@ -40,8 +40,6 @@ array_push($errors, "Configuration file not found. Looks like you forgot to copy config.php-dist to config.php and edit it."); } else { - require_once "sanity_config.php"; - if (!file_exists("config.php")) { array_push($errors, "Please copy config.php-dist to config.php"); } @@ -78,12 +76,14 @@ array_push($errors, "Data export cache is not writable (chmod -R 777 ".CACHE_DIR."/export)"); } + require_once "sanity_config.php"; + if (GENERATED_CONFIG_CHECK != EXPECTED_CONFIG_VERSION) { array_push($errors, "Configuration option checker sanity_config.php is outdated, please recreate it using ./utils/regen_config_checks.sh"); } - foreach ($required_defines as $d) { + foreach (get_required_defines() as $d) { if (!defined($d)) { array_push($errors, "Required configuration file parameter $d is not defined in config.php. You might need to copy it from config.php-dist."); diff --git a/include/sanity_config.php b/include/sanity_config.php index 5059ee83b..b304adf54 100644 --- a/include/sanity_config.php +++ b/include/sanity_config.php @@ -1,3 +1,3 @@ -<?php # This file has been generated at: Fri Feb 12 21:33:46 MSK 2021 +<?php # This file has been generated at: Mon Feb 22 14:17:27 MSK 2021 define('GENERATED_CONFIG_CHECK', 26); -$required_defines = array( 'DB_TYPE', 'DB_HOST', 'DB_USER', 'DB_NAME', 'DB_PASS', 'MYSQL_CHARSET', 'SELF_URL_PATH', 'SINGLE_USER_MODE', 'SIMPLE_UPDATE_MODE', 'PHP_EXECUTABLE', 'LOCK_DIRECTORY', 'CACHE_DIR', 'ICONS_DIR', 'ICONS_URL', 'AUTH_AUTO_CREATE', 'AUTH_AUTO_LOGIN', 'FORCE_ARTICLE_PURGE', 'SESSION_COOKIE_LIFETIME', 'SMTP_FROM_NAME', 'SMTP_FROM_ADDRESS', 'DIGEST_SUBJECT', 'CHECK_FOR_UPDATES', 'PLUGINS', 'LOG_DESTINATION', 'CONFIG_VERSION'); ?> +function get_required_defines() { return [ 'DB_TYPE', 'DB_HOST', 'DB_USER', 'DB_NAME', 'DB_PASS', 'MYSQL_CHARSET', 'SELF_URL_PATH', 'SINGLE_USER_MODE', 'SIMPLE_UPDATE_MODE', 'PHP_EXECUTABLE', 'LOCK_DIRECTORY', 'CACHE_DIR', 'ICONS_DIR', 'ICONS_URL', 'AUTH_AUTO_CREATE', 'AUTH_AUTO_LOGIN', 'FORCE_ARTICLE_PURGE', 'SESSION_COOKIE_LIFETIME', 'SMTP_FROM_NAME', 'SMTP_FROM_ADDRESS', 'DIGEST_SUBJECT', 'CHECK_FOR_UPDATES', 'PLUGINS', 'LOG_DESTINATION', 'CONFIG_VERSION']; } diff --git a/include/sessions.php b/include/sessions.php index 16de53ab2..5b372612b 100644 --- a/include/sessions.php +++ b/include/sessions.php @@ -12,14 +12,14 @@ $session_name = (!defined('TTRSS_SESSION_NAME')) ? "ttrss_sid" : TTRSS_SESSION_NAME; if (is_server_https()) { - ini_set("session.cookie_secure", true); + ini_set("session.cookie_secure", "true"); } - ini_set("session.gc_probability", 75); + ini_set("session.gc_probability", "75"); ini_set("session.name", $session_name); - ini_set("session.use_only_cookies", true); + ini_set("session.use_only_cookies", "true"); ini_set("session.gc_maxlifetime", $session_expire); - ini_set("session.cookie_lifetime", 0); + ini_set("session.cookie_lifetime", "0"); function session_get_schema_version() { global $schema_version; diff --git a/phpstan.neon b/phpstan.neon index 0703e0d15..b2cd978d8 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -2,7 +2,9 @@ parameters: level: 5 ignoreErrors: - '#Constant.*not found#' - - '#Call to an undefined method DOMNode::getAttribute\(\).#' + - '#Comparison operation ">" between int<1, max> and 0 is always true.#' + - '#Access to an undefined property DOMNode::\$tagName.#' + - '#Call to an undefined method DOMNode::(get|remove|set)Attribute\(\).#' - '#PHPDoc tag @param has invalid value#' - message: '##' paths: diff --git a/plugins/af_fsckportal/init.php b/plugins/af_fsckportal/init.php index 04b77a15a..8caa617c6 100644 --- a/plugins/af_fsckportal/init.php +++ b/plugins/af_fsckportal/init.php @@ -19,9 +19,7 @@ class Af_Fsckportal extends Plugin { $doc = new DOMDocument(); - @$doc->loadHTML('<?xml encoding="UTF-8">' . $article["content"]); - - if ($doc) { + if (@$doc->loadHTML('<?xml encoding="UTF-8">' . $article["content"])) { $xpath = new DOMXPath($doc); $entries = $xpath->query('(//img[@src]|//a[@href])'); @@ -34,7 +32,6 @@ class Af_Fsckportal extends Plugin { } $article["content"] = $doc->saveHTML(); - } return $article; diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php index 2677fdd90..713eaea5c 100755 --- a/plugins/af_redditimgur/init.php +++ b/plugins/af_redditimgur/init.php @@ -207,7 +207,7 @@ class Af_RedditImgur extends Plugin { $found = false; // embed before reddit <table> post layout - $anchor = $xpath->query('//body/*')->item(0); + $anchor = $xpath->query('//_body/*')->item(0); // deal with json-provided media content first if ($article["link"] && $anchor) { @@ -217,6 +217,7 @@ class Af_RedditImgur extends Plugin { $this->fallback_preview_urls = []; + // @phpstan-ignore-next-line if ($tmp && $anchor) { $json = json_decode($tmp, true); @@ -346,6 +347,8 @@ class Af_RedditImgur extends Plugin { if (strpos($source_stream, "imgur.com") !== false) $poster_url = str_replace(".mp4", "h.jpg", $source_stream); + else + $poster_url = false; $this->handle_as_video($doc, $entry, $source_stream, $poster_url); diff --git a/update.php b/update.php index 1f79dccf0..71b8cf76c 100755 --- a/update.php +++ b/update.php @@ -32,7 +32,7 @@ if (DB_TYPE == "pgsql") { $interval_query = "date_updated < NOW() - INTERVAL '$days days'"; - } else if (DB_TYPE == "mysql") { + } else /*if (DB_TYPE == "mysql") */ { $interval_query = "date_updated < DATE_SUB(NOW(), INTERVAL $days DAY)"; } @@ -459,7 +459,7 @@ if (isset($options["list-plugins"])) { $tmppluginhost = new PluginHost(); - $tmppluginhost->load_all($tmppluginhost::KIND_ALL, false); + $tmppluginhost->load_all($tmppluginhost::KIND_ALL); $enabled = array_map("trim", explode(",", PLUGINS)); echo "List of all available plugins:\n"; diff --git a/utils/regen_config_checks.sh b/utils/regen_config_checks.sh index e8b1ed830..b20ce0480 100755 --- a/utils/regen_config_checks.sh +++ b/utils/regen_config_checks.sh @@ -8,10 +8,10 @@ echo -n "define('GENERATED_CONFIG_CHECK', " >> $DESTINATION grep CONFIG_VERSION config.php-dist | awk -F ' |\)' '{ print $2 }' | xargs echo -n >> $DESTINATION echo ");" >> $DESTINATION -echo -n "\$required_defines = array( " >> $DESTINATION +echo -n "function get_required_defines() { return [ " >> $DESTINATION grep define\( config.php-dist | awk -F\' '{ print "*" $2 "*," }' | grep -v DB_PORT | xargs echo -n | sed -e s/,$// -e s/*/\'/g >> $DESTINATION -echo "); ?>" >> $DESTINATION +echo "]; }" >> $DESTINATION -- GitLab