diff --git a/ChangeLog b/ChangeLog index 2ab770de46..5c3296a906 100644 --- a/ChangeLog +++ b/ChangeLog @@ -33,6 +33,7 @@ phpMyAdmin - ChangeLog - bug #3960 NavigationBarIconic config not honored - bug #3985 Call to undefined function mb_detect_encoding - bug #4007 Analyze option not shown for InnoDB tables +- bug #4015 Forcing a storage engine for configuration storage 4.0.4.1 (2013-06-30) - [security] Global variables scope injection vulnerability (see PMASA-2013-7) diff --git a/examples/create_tables.sql b/examples/create_tables.sql index c3a62a20af..723334c776 100644 --- a/examples/create_tables.sql +++ b/examples/create_tables.sql @@ -44,7 +44,7 @@ CREATE TABLE IF NOT EXISTS `pma__bookmark` ( `query` text NOT NULL, PRIMARY KEY (`id`) ) - ENGINE=MyISAM COMMENT='Bookmarks' + COMMENT='Bookmarks' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- @@ -65,7 +65,7 @@ CREATE TABLE IF NOT EXISTS `pma__column_info` ( PRIMARY KEY (`id`), UNIQUE KEY `db_name` (`db_name`,`table_name`,`column_name`) ) - ENGINE=MyISAM COMMENT='Column information for phpMyAdmin' + COMMENT='Column information for phpMyAdmin' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- @@ -84,7 +84,7 @@ CREATE TABLE IF NOT EXISTS `pma__history` ( PRIMARY KEY (`id`), KEY `username` (`username`,`db`,`table`,`timevalue`) ) - ENGINE=MyISAM COMMENT='SQL history for phpMyAdmin' + COMMENT='SQL history for phpMyAdmin' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- @@ -100,7 +100,7 @@ CREATE TABLE IF NOT EXISTS `pma__pdf_pages` ( PRIMARY KEY (`page_nr`), KEY `db_name` (`db_name`) ) - ENGINE=MyISAM COMMENT='PDF relation pages for phpMyAdmin' + COMMENT='PDF relation pages for phpMyAdmin' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- @@ -114,7 +114,7 @@ CREATE TABLE IF NOT EXISTS `pma__recent` ( `tables` text NOT NULL, PRIMARY KEY (`username`) ) - ENGINE=MyISAM COMMENT='Recently accessed tables' + COMMENT='Recently accessed tables' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- @@ -131,7 +131,7 @@ CREATE TABLE IF NOT EXISTS `pma__table_uiprefs` ( `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`username`,`db_name`,`table_name`) ) - ENGINE=MyISAM COMMENT='Tables'' UI preferences' + COMMENT='Tables'' UI preferences' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- @@ -150,7 +150,7 @@ CREATE TABLE IF NOT EXISTS `pma__relation` ( PRIMARY KEY (`master_db`,`master_table`,`master_field`), KEY `foreign_field` (`foreign_db`,`foreign_table`) ) - ENGINE=MyISAM COMMENT='Relation table' + COMMENT='Relation table' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- @@ -167,7 +167,7 @@ CREATE TABLE IF NOT EXISTS `pma__table_coords` ( `y` float unsigned NOT NULL default '0', PRIMARY KEY (`db_name`,`table_name`,`pdf_page_number`) ) - ENGINE=MyISAM COMMENT='Table coordinates for phpMyAdmin PDF output' + COMMENT='Table coordinates for phpMyAdmin PDF output' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- @@ -182,7 +182,7 @@ CREATE TABLE IF NOT EXISTS `pma__table_info` ( `display_field` varchar(64) NOT NULL default '', PRIMARY KEY (`db_name`,`table_name`) ) - ENGINE=MyISAM COMMENT='Table information for phpMyAdmin' + COMMENT='Table information for phpMyAdmin' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- @@ -200,7 +200,7 @@ CREATE TABLE IF NOT EXISTS `pma__designer_coords` ( `h` TINYINT, PRIMARY KEY (`db_name`,`table_name`) ) - ENGINE=MyISAM COMMENT='Table coordinates for Designer' + COMMENT='Table coordinates for Designer' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- @@ -222,7 +222,7 @@ CREATE TABLE IF NOT EXISTS `pma__tracking` ( `tracking_active` int(1) unsigned NOT NULL default '1', PRIMARY KEY (`db_name`,`table_name`,`version`) ) - ENGINE=MyISAM ROW_FORMAT=COMPACT COMMENT='Database changes tracking for phpMyAdmin' + COMMENT='Database changes tracking for phpMyAdmin' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- -------------------------------------------------------- @@ -237,5 +237,5 @@ CREATE TABLE IF NOT EXISTS `pma__userconfig` ( `config_data` text NOT NULL, PRIMARY KEY (`username`) ) - ENGINE=MyISAM COMMENT='User preferences storage for phpMyAdmin' + COMMENT='User preferences storage for phpMyAdmin' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; diff --git a/examples/create_tables_drizzle.sql b/examples/create_tables_drizzle.sql index 21c24ca2bc..92de90afec 100644 --- a/examples/create_tables_drizzle.sql +++ b/examples/create_tables_drizzle.sql @@ -31,7 +31,7 @@ CREATE TABLE IF NOT EXISTS `pma__bookmark` ( `query` text NOT NULL, PRIMARY KEY (`id`) ) - ENGINE=InnoDB COMMENT='Bookmarks' + COMMENT='Bookmarks' COLLATE utf8_bin; -- -------------------------------------------------------- @@ -52,7 +52,7 @@ CREATE TABLE IF NOT EXISTS `pma__column_info` ( PRIMARY KEY (`id`), UNIQUE KEY `db_name` (`db_name`,`table_name`,`column_name`) ) - ENGINE=InnoDB COMMENT='Column information for phpMyAdmin' + COMMENT='Column information for phpMyAdmin' COLLATE utf8_bin; -- -------------------------------------------------------- @@ -71,7 +71,7 @@ CREATE TABLE IF NOT EXISTS `pma__history` ( PRIMARY KEY (`id`), KEY `username` (`username`,`db`,`table`,`timevalue`) ) - ENGINE=InnoDB COMMENT='SQL history for phpMyAdmin' + COMMENT='SQL history for phpMyAdmin' COLLATE utf8_bin; -- -------------------------------------------------------- @@ -87,7 +87,7 @@ CREATE TABLE IF NOT EXISTS `pma__pdf_pages` ( PRIMARY KEY (`page_nr`), KEY `db_name` (`db_name`) ) - ENGINE=InnoDB COMMENT='PDF relation pages for phpMyAdmin' + COMMENT='PDF relation pages for phpMyAdmin' COLLATE utf8_bin; -- -------------------------------------------------------- @@ -101,7 +101,7 @@ CREATE TABLE IF NOT EXISTS `pma__recent` ( `tables` text NOT NULL, PRIMARY KEY (`username`) ) - ENGINE=InnoDB COMMENT='Recently accessed tables' + COMMENT='Recently accessed tables' COLLATE utf8_bin; -- -------------------------------------------------------- @@ -118,7 +118,7 @@ CREATE TABLE IF NOT EXISTS `pma__table_uiprefs` ( `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`username`,`db_name`,`table_name`) ) - ENGINE=InnoDB COMMENT='Tables'' UI preferences' + COMMENT='Tables'' UI preferences' COLLATE utf8_bin; -- -------------------------------------------------------- @@ -137,7 +137,7 @@ CREATE TABLE IF NOT EXISTS `pma__relation` ( PRIMARY KEY (`master_db`,`master_table`,`master_field`), KEY `foreign_field` (`foreign_db`,`foreign_table`) ) - ENGINE=InnoDB COMMENT='Relation table' + COMMENT='Relation table' COLLATE utf8_bin; -- -------------------------------------------------------- @@ -154,7 +154,7 @@ CREATE TABLE IF NOT EXISTS `pma__table_coords` ( `y` float NOT NULL default '0', PRIMARY KEY (`db_name`,`table_name`,`pdf_page_number`) ) - ENGINE=InnoDB COMMENT='Table coordinates for phpMyAdmin PDF output' + COMMENT='Table coordinates for phpMyAdmin PDF output' COLLATE utf8_bin; -- -------------------------------------------------------- @@ -169,7 +169,7 @@ CREATE TABLE IF NOT EXISTS `pma__table_info` ( `display_field` varchar(64) NOT NULL default '', PRIMARY KEY (`db_name`,`table_name`) ) - ENGINE=InnoDB COMMENT='Table information for phpMyAdmin' + COMMENT='Table information for phpMyAdmin' COLLATE utf8_bin; -- -------------------------------------------------------- @@ -187,7 +187,7 @@ CREATE TABLE IF NOT EXISTS `pma__designer_coords` ( `h` INT, PRIMARY KEY (`db_name`,`table_name`) ) - ENGINE=InnoDB COMMENT='Table coordinates for Designer' + COMMENT='Table coordinates for Designer' COLLATE utf8_bin; -- -------------------------------------------------------- @@ -209,7 +209,6 @@ CREATE TABLE IF NOT EXISTS `pma__tracking` ( `tracking_active` int(1) NOT NULL default '1', PRIMARY KEY (`db_name`,`table_name`,`version`) ) - ENGINE=InnoDB COLLATE utf8_bin; -- -------------------------------------------------------- @@ -224,5 +223,5 @@ CREATE TABLE IF NOT EXISTS `pma__userconfig` ( `config_data` text NOT NULL, PRIMARY KEY (`username`) ) - ENGINE=InnoDB COMMENT='User preferences storage for phpMyAdmin' + COMMENT='User preferences storage for phpMyAdmin' COLLATE utf8_bin; diff --git a/libraries/config.values.php b/libraries/config.values.php index da9cce8dfb..7007222351 100644 --- a/libraries/config.values.php +++ b/libraries/config.values.php @@ -198,41 +198,41 @@ $cfg_db['_overrides']['Servers/1/extension'] = extension_loaded('mysqli') * Use only full paths and form ids */ $cfg_db['_validators'] = array( - 'CharTextareaCols' => 'PMA_validatePositiveNumber', - 'CharTextareaRows' => 'PMA_validatePositiveNumber', - 'ExecTimeLimit' => 'PMA_validateNonNegativeNumber', - 'Export/sql_max_query_size' => 'PMA_validatePositiveNumber', - 'ForeignKeyMaxLimit' => 'PMA_validatePositiveNumber', - 'Import/csv_enclosed' => array(array('PMA_validateByRegex', '/^.?$/')), - 'Import/csv_escaped' => array(array('PMA_validateByRegex', '/^.$/')), - 'Import/csv_terminated' => array(array('PMA_validateByRegex', '/^.$/')), - 'Import/ldi_enclosed' => array(array('PMA_validateByRegex', '/^.?$/')), - 'Import/ldi_escaped' => array(array('PMA_validateByRegex', '/^.$/')), - 'Import/ldi_terminated' => array(array('PMA_validateByRegex', '/^.$/')), - 'Import/skip_queries' => 'PMA_validateNonNegativeNumber', - 'InsertRows' => 'PMA_validatePositiveNumber', - 'NumRecentTables' => 'PMA_validateNonNegativeNumber', - 'LimitChars' => 'PMA_validatePositiveNumber', - 'LoginCookieValidity' => 'PMA_validatePositiveNumber', - 'LoginCookieStore' => 'PMA_validateNonNegativeNumber', - 'MaxDbList' => 'PMA_validatePositiveNumber', - 'MaxNavigationItems' => 'PMA_validatePositiveNumber', - 'MaxCharactersInDisplayedSQL' => 'PMA_validatePositiveNumber', - 'MaxRows' => 'PMA_validatePositiveNumber', - 'MaxTableList' => 'PMA_validatePositiveNumber', - 'MemoryLimit' => array(array('PMA_validateByRegex', '/^\d+(?:[kmg])?$/i')), - 'NavigationTreeTableLevel' => 'PMA_validatePositiveNumber', - 'QueryHistoryMax' => 'PMA_validatePositiveNumber', - 'QueryWindowWidth' => 'PMA_validatePositiveNumber', - 'QueryWindowHeight' => 'PMA_validatePositiveNumber', - 'RepeatCells' => 'PMA_validateNonNegativeNumber', - 'Server' => 'PMA_validateServer', - 'Server_pmadb' => 'PMA_validatePMAStorage', - 'Servers/1/port' => 'PMA_validatePortNumber', - 'Servers/1/hide_db' => 'PMA_validateRegex', - 'TextareaCols' => 'PMA_validatePositiveNumber', - 'TextareaRows' => 'PMA_validatePositiveNumber', - 'TrustedProxies' => 'PMA_validateTrustedProxies'); + 'CharTextareaCols' => 'validatePositiveNumber', + 'CharTextareaRows' => 'validatePositiveNumber', + 'ExecTimeLimit' => 'validateNonNegativeNumber', + 'Export/sql_max_query_size' => 'validatePositiveNumber', + 'ForeignKeyMaxLimit' => 'validatePositiveNumber', + 'Import/csv_enclosed' => array(array('validateByRegex', '/^.?$/')), + 'Import/csv_escaped' => array(array('validateByRegex', '/^.$/')), + 'Import/csv_terminated' => array(array('validateByRegex', '/^.$/')), + 'Import/ldi_enclosed' => array(array('validateByRegex', '/^.?$/')), + 'Import/ldi_escaped' => array(array('validateByRegex', '/^.$/')), + 'Import/ldi_terminated' => array(array('validateByRegex', '/^.$/')), + 'Import/skip_queries' => 'validateNonNegativeNumber', + 'InsertRows' => 'validatePositiveNumber', + 'NumRecentTables' => 'validateNonNegativeNumber', + 'LimitChars' => 'validatePositiveNumber', + 'LoginCookieValidity' => 'validatePositiveNumber', + 'LoginCookieStore' => 'validateNonNegativeNumber', + 'MaxDbList' => 'validatePositiveNumber', + 'MaxNavigationItems' => 'validatePositiveNumber', + 'MaxCharactersInDisplayedSQL' => 'validatePositiveNumber', + 'MaxRows' => 'validatePositiveNumber', + 'MaxTableList' => 'validatePositiveNumber', + 'MemoryLimit' => array(array('validateByRegex', '/^\d+(?:[kmg])?$/i')), + 'NavigationTreeTableLevel' => 'validatePositiveNumber', + 'QueryHistoryMax' => 'validatePositiveNumber', + 'QueryWindowWidth' => 'validatePositiveNumber', + 'QueryWindowHeight' => 'validatePositiveNumber', + 'RepeatCells' => 'validateNonNegativeNumber', + 'Server' => 'validateServer', + 'Server_pmadb' => 'validatePMAStorage', + 'Servers/1/port' => 'validatePortNumber', + 'Servers/1/hide_db' => 'validateRegex', + 'TextareaCols' => 'validatePositiveNumber', + 'TextareaRows' => 'validatePositiveNumber', + 'TrustedProxies' => 'validateTrustedProxies'); /** * Additional validators used for user preferences diff --git a/libraries/config/FormDisplay.tpl.php b/libraries/config/FormDisplay.tpl.php index 8203ce3d22..b3a18e3b69 100644 --- a/libraries/config/FormDisplay.tpl.php +++ b/libraries/config/FormDisplay.tpl.php @@ -447,6 +447,7 @@ function PMA_addJsValidate($field_id, $validators, &$js_array) foreach ((array)$validators as $validator) { $validator = (array)$validator; $v_name = array_shift($validator); + $v_name = "PMA_" . $v_name; $v_args = array(); foreach ($validator as $arg) { $v_args[] = PMA_escapeJsString($arg); diff --git a/libraries/config/Validator.class.php b/libraries/config/Validator.class.php index 2cfed3da7c..ef65681b88 100644 --- a/libraries/config/Validator.class.php +++ b/libraries/config/Validator.class.php @@ -109,6 +109,7 @@ class PMA_Validator foreach ((array)$validators[$vid] as $validator) { $vdef = (array) $validator; $vname = array_shift($vdef); + $vname = "Validator::" . $vname; $args = array_merge(array($vid, &$arguments), $vdef); $r = call_user_func_array($vname, $args); diff --git a/test/libraries/PMA_FormDisplay_tpl_test.php b/test/libraries/PMA_FormDisplay_tpl_test.php index 72d492505c..524c237d61 100644 --- a/test/libraries/PMA_FormDisplay_tpl_test.php +++ b/test/libraries/PMA_FormDisplay_tpl_test.php @@ -772,9 +772,9 @@ class PMA_FormDisplay_Tpl_Test extends PHPUnit_Framework_TestCase $this->assertEquals( array( - 'validateField(\'testID\', \'\\\';\', true, [\'\\\\r\\\\n\\\\\\\'' . + 'validateField(\'testID\', \'PMA_\\\';\', true, [\'\\\\r\\\\n\\\\\\\'' . '