From 909ff2daa7b0b7382b43c5e74edf659bf26ce87c Mon Sep 17 00:00:00 2001 From: El RIDO Date: Sun, 19 May 2019 09:42:55 +0200 Subject: [PATCH] handle scrutinizer issues (mostly changes in API documentation) --- lib/Controller.php | 12 ++-- lib/Data/AbstractData.php | 2 +- lib/Data/Database.php | 127 +++++++++++++++++----------------- lib/Json.php | 2 +- lib/Persistence/DataStore.php | 2 +- lib/Request.php | 2 +- 6 files changed, 75 insertions(+), 72 deletions(-) diff --git a/lib/Controller.php b/lib/Controller.php index 2ab1ea7..8759a42 100644 --- a/lib/Controller.php +++ b/lib/Controller.php @@ -199,12 +199,13 @@ class Controller // Ensure last paste from visitors IP address was more than configured amount of seconds ago. TrafficLimiter::setConfiguration($this->_conf); if (!TrafficLimiter::canPass()) { - return $this->_return_message( + $this->_return_message( 1, I18n::_( 'Please wait %d seconds between each post.', $this->_conf->getKey('limit', 'traffic') ) ); + return; } $data = $this->_request->getData(); @@ -213,18 +214,20 @@ class Controller array_key_exists('parentid', $data) && !empty($data['parentid']); if (!FormatV2::isValid($data, $isComment)) { - return $this->_return_message(1, I18n::_('Invalid data.')); + $this->_return_message(1, I18n::_('Invalid data.')); + return; } $sizelimit = $this->_conf->getKey('sizelimit'); // Ensure content is not too big. if (strlen($data['ct']) > $sizelimit) { - return $this->_return_message( + $this->_return_message( 1, I18n::_( 'Paste is limited to %s of encrypted data.', Filter::formatHumanReadableSize($sizelimit) ) ); + return; } // The user posts a comment. @@ -236,7 +239,8 @@ class Controller $comment->setData($data); $comment->store(); } catch (Exception $e) { - return $this->_return_message(1, $e->getMessage()); + $this->_return_message(1, $e->getMessage()); + return; } $this->_return_message(0, $comment->getId()); } else { diff --git a/lib/Data/AbstractData.php b/lib/Data/AbstractData.php index 3d7c2b9..6e60ea1 100644 --- a/lib/Data/AbstractData.php +++ b/lib/Data/AbstractData.php @@ -79,7 +79,7 @@ abstract class AbstractData * * @access public * @param string $pasteid - * @return stdClass|false + * @return array|false */ abstract public function read($pasteid); diff --git a/lib/Data/Database.php b/lib/Data/Database.php index 9f98184..1b3e934 100644 --- a/lib/Data/Database.php +++ b/lib/Data/Database.php @@ -75,73 +75,71 @@ class Database extends AbstractData self::$_instance = new self; } - if (is_array($options)) { - // set table prefix if given - if (array_key_exists('tbl', $options)) { - self::$_prefix = $options['tbl']; + // set table prefix if given + if (array_key_exists('tbl', $options)) { + self::$_prefix = $options['tbl']; + } + + // initialize the db connection with new options + if ( + array_key_exists('dsn', $options) && + array_key_exists('usr', $options) && + array_key_exists('pwd', $options) && + array_key_exists('opt', $options) + ) { + // set default options + $options['opt'][PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; + $options['opt'][PDO::ATTR_EMULATE_PREPARES] = false; + $options['opt'][PDO::ATTR_PERSISTENT] = true; + $db_tables_exist = true; + + // setup type and dabase connection + self::$_type = strtolower( + substr($options['dsn'], 0, strpos($options['dsn'], ':')) + ); + $tableQuery = self::_getTableQuery(self::$_type); + self::$_db = new PDO( + $options['dsn'], + $options['usr'], + $options['pwd'], + $options['opt'] + ); + + // check if the database contains the required tables + $tables = self::$_db->query($tableQuery)->fetchAll(PDO::FETCH_COLUMN, 0); + + // create paste table if necessary + if (!in_array(self::_sanitizeIdentifier('paste'), $tables)) { + self::_createPasteTable(); + $db_tables_exist = false; } - // initialize the db connection with new options - if ( - array_key_exists('dsn', $options) && - array_key_exists('usr', $options) && - array_key_exists('pwd', $options) && - array_key_exists('opt', $options) - ) { - // set default options - $options['opt'][PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; - $options['opt'][PDO::ATTR_EMULATE_PREPARES] = false; - $options['opt'][PDO::ATTR_PERSISTENT] = true; - $db_tables_exist = true; + // create comment table if necessary + if (!in_array(self::_sanitizeIdentifier('comment'), $tables)) { + self::_createCommentTable(); + $db_tables_exist = false; + } - // setup type and dabase connection - self::$_type = strtolower( - substr($options['dsn'], 0, strpos($options['dsn'], ':')) - ); - $tableQuery = self::_getTableQuery(self::$_type); - self::$_db = new PDO( - $options['dsn'], - $options['usr'], - $options['pwd'], - $options['opt'] - ); - - // check if the database contains the required tables - $tables = self::$_db->query($tableQuery)->fetchAll(PDO::FETCH_COLUMN, 0); - - // create paste table if necessary - if (!in_array(self::_sanitizeIdentifier('paste'), $tables)) { - self::_createPasteTable(); - $db_tables_exist = false; - } - - // create comment table if necessary - if (!in_array(self::_sanitizeIdentifier('comment'), $tables)) { - self::_createCommentTable(); - $db_tables_exist = false; - } - - // create config table if necessary - $db_version = Controller::VERSION; - if (!in_array(self::_sanitizeIdentifier('config'), $tables)) { - self::_createConfigTable(); - // if we only needed to create the config table, the DB is older then 0.22 - if ($db_tables_exist) { - $db_version = '0.21'; - } - } else { - $db_version = self::_getConfig('VERSION'); - } - - // update database structure if necessary - if (version_compare($db_version, Controller::VERSION, '<')) { - self::_upgradeDatabase($db_version); + // create config table if necessary + $db_version = Controller::VERSION; + if (!in_array(self::_sanitizeIdentifier('config'), $tables)) { + self::_createConfigTable(); + // if we only needed to create the config table, the DB is older then 0.22 + if ($db_tables_exist) { + $db_version = '0.21'; } } else { - throw new Exception( - 'Missing configuration for key dsn, usr, pwd or opt in the section model_options, please check your configuration file', 6 - ); + $db_version = self::_getConfig('VERSION'); } + + // update database structure if necessary + if (version_compare($db_version, Controller::VERSION, '<')) { + self::_upgradeDatabase($db_version); + } + } else { + throw new Exception( + 'Missing configuration for key dsn, usr, pwd or opt in the section model_options, please check your configuration file', 6 + ); } return self::$_instance; @@ -250,8 +248,9 @@ class Database extends AbstractData list($createdKey) = self::_getVersionedKeys(1); } - $paste['meta'] = Json::decode($paste['meta']); - if (!is_array($paste['meta'])) { + try { + $paste['meta'] = Json::decode($paste['meta']); + } catch (Exception $e) { $paste['meta'] = array(); } $paste = self::upgradePreV1Format($paste); @@ -474,7 +473,7 @@ class Database extends AbstractData * @param array $params * @param bool $firstOnly if only the first row should be returned * @throws PDOException - * @return array + * @return array|false */ private static function _select($sql, array $params, $firstOnly = false) { diff --git a/lib/Json.php b/lib/Json.php index d57aa50..9ce0824 100644 --- a/lib/Json.php +++ b/lib/Json.php @@ -63,7 +63,7 @@ class Json */ private static function _detectError() { - $errorCode = json_last_error(); + $errorCode = json_last_error(); if ($errorCode === JSON_ERROR_NONE) { return; } diff --git a/lib/Persistence/DataStore.php b/lib/Persistence/DataStore.php index 4718889..27ebd9c 100644 --- a/lib/Persistence/DataStore.php +++ b/lib/Persistence/DataStore.php @@ -61,7 +61,7 @@ class DataStore extends AbstractPersistence * @access public * @static * @param string $filename - * @return \stdClass|false $data + * @return array|false $data */ public static function get($filename) { diff --git a/lib/Request.php b/lib/Request.php index 1752035..cf12cae 100644 --- a/lib/Request.php +++ b/lib/Request.php @@ -184,7 +184,7 @@ class Request * * @access public * @param string $param - * @param string $default + * @param string|array $default * @return string */ public function getParam($param, $default = '')