Aleksander Machniak
2015-04-06 48d01837a0a5725d2779f30d20478e77572e9ac5
Fix tables listing routine on mysql and postgres so it skips system or other database tables and views (#1490337)
4 files modified
55 ■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_db.php 11 ●●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_db_mysql.php 24 ●●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_db_pgsql.php 19 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -10,6 +10,7 @@
- Fix zipped messages downloads after selecting all messages in a folder (#1490339)
- Fix vpopmaild driver of password plugin
- Fix PHP warning: Non-static method PEAR::setErrorHandling() should not be called statically (#1490343)
- Fix tables listing routine on mysql and postgres so it skips system or other database tables and views (#1490337)
RELEASE 1.1.1
-------------
program/lib/Roundcube/rcube_db.php
@@ -691,14 +691,11 @@
    {
        // get tables if not cached
        if ($this->tables === null) {
            $q = $this->query('SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME');
            $q = $this->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"
                . " WHERE TABLE_TYPE = 'BASE TABLE'"
                . " ORDER BY TABLE_NAME");
            if ($q) {
                $this->tables = $q->fetchAll(PDO::FETCH_COLUMN, 0);
            }
            else {
                $this->tables = array();
            }
            $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : array();
        }
        return $this->tables;
program/lib/Roundcube/rcube_db_mysql.php
@@ -150,6 +150,30 @@
    }
    /**
     * Returns list of tables in a database
     *
     * @return array List of all tables of the current database
     */
    public function list_tables()
    {
        // get tables if not cached
        if ($this->tables === null) {
            // first fetch current database name
            $d = $this->query("SELECT database()");
            $d = $this->fetch_array($d);
            // get list of tables in current database
            $q = $this->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"
                . " WHERE TABLE_SCHEMA = ? AND TABLE_TYPE = 'BASE TABLE'"
                . " ORDER BY TABLE_NAME", $d ? $d[0] : '');
            $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : array();
        }
        return $this->tables;
    }
    /**
     * Get database runtime variables
     *
     * @param string $varname Variable name
program/lib/Roundcube/rcube_db_pgsql.php
@@ -158,6 +158,25 @@
    }
    /**
     * Returns list of tables in a database
     *
     * @return array List of all tables of the current database
     */
    public function list_tables()
    {
        // get tables if not cached
        if ($this->tables === null) {
            $q = $this->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"
                . " WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA NOT IN ('pg_catalog', 'information_schema')"
                . " ORDER BY TABLE_NAME");
            $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : array();
        }
        return $this->tables;
    }
    /**
     * Returns PDO DSN string from DSN array
     *
     * @param array $dsn DSN parameters