From 34c74400a471b31fea22ea85636f47c76d783710 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 25 Feb 2021 17:10:03 +0300 Subject: enforce some stricter type checking for loggers --- classes/handler/public.php | 2 +- classes/logger.php | 3 +++ classes/logger/adapter.php | 4 ++++ classes/logger/sql.php | 8 +++----- classes/logger/stdout.php | 4 ++-- classes/logger/syslog.php | 4 ++-- include/errorhandler.php | 12 ++++-------- 7 files changed, 19 insertions(+), 18 deletions(-) create mode 100644 classes/logger/adapter.php diff --git a/classes/handler/public.php b/classes/handler/public.php index abfe07b8f..e4572382e 100755 --- a/classes/handler/public.php +++ b/classes/handler/public.php @@ -614,7 +614,7 @@ class Handler_Public extends Handler { function dbupdate() { startup_gettext(); - if (!Config::get(Config::SINGLE_USER_MODE) && $_SESSION["access_level"] < 10) { + if (!Config::get(Config::SINGLE_USER_MODE) && ($_SESSION["access_level"] ?? 0) < 10) { $_SESSION["login_error_msg"] = __("Your access level is insufficient to run this script."); $this->_render_login_form(); exit; diff --git a/classes/logger.php b/classes/logger.php index c227c014c..ef77c7a05 100755 --- a/classes/logger.php +++ b/classes/logger.php @@ -63,6 +63,9 @@ class Logger { default: $this->adapter = false; } + + if ($this->adapter && !implements_interface($this->adapter, "Logger_Adapter")) + user_error("Adapter for LOG_DESTINATION: " . Config::LOG_DESTINATION . " does not implement required interface.", E_USER_ERROR); } private static function get_instance() : Logger { diff --git a/classes/logger/adapter.php b/classes/logger/adapter.php new file mode 100644 index 000000000..79f641441 --- /dev/null +++ b/classes/logger/adapter.php @@ -0,0 +1,4 @@ +pdo) $this->pdo = Db::instance()->pdo_connect(); if ($this->pdo && get_schema_version() > 117) { - $owner_uid = $_SESSION["uid"] ?? null; - // limit context length, DOMDocument dumps entire XML in here sometimes, which may be huge $context = mb_substr($context, 0, 8192); @@ -37,7 +35,7 @@ class Logger_SQL { $sth = $this->pdo->prepare("INSERT INTO ttrss_error_log (errno, errstr, filename, lineno, context, owner_uid, created_at) VALUES (?, ?, ?, ?, ?, ?, NOW())"); - $sth->execute([$errno, $errstr, $file, $line, $context, $owner_uid]); + $sth->execute([$errno, $errstr, $file, $line, $context, $_SESSION["uid"] ?? null]); return $sth->rowCount(); } diff --git a/classes/logger/stdout.php b/classes/logger/stdout.php index 645fe8ecf..e906853ce 100644 --- a/classes/logger/stdout.php +++ b/classes/logger/stdout.php @@ -1,7 +1,7 @@