diff --git a/ChangeLog b/ChangeLog index 5ce98080bc..fb371c2082 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,19 @@ phpMyAdmin - ChangeLog ====================== +4.3.11.1 (2015-03-04) +- bug [security] Risk of BREACH attack, see PMASA-2015-1 + +4.3.11.0 (2015-03-02) +- bug #4774 SQL links are completely wrong +- bug #4768 MariaDB: version mismatch +- bug #4777 Some images are missing in Designer for original theme +- bug #4767 Drizzle: undefined index in mysql_charsets.inc.php +- bug #4753 Normal field and multi-line field have different margins +- bug #4760 Cannot re-import settings from local storage +- bug #4778 SQL error when database list is sorted by additional columns +- bug #4780 Notice when timestamp column does not have default value + 4.3.10.0 (2015-02-20) - bug Undefined index navwork - bug #4744 Opening console scroll down the page diff --git a/README b/README index 5229356256..788ab2b65c 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ phpMyAdmin - Readme =================== -Version 4.3.10 +Version 4.3.11.1 A set of PHP-scripts to manage MySQL over the web. diff --git a/index.php b/index.php index 97bbeaf36e..0e3e0c85d6 100644 --- a/index.php +++ b/index.php @@ -564,6 +564,8 @@ if ($server > 0) { * If no default server is set, $GLOBALS['dbi'] is not defined yet. * Drizzle can speak MySQL protocol, so don't warn about version mismatch for * Drizzle servers. + * We also do not warn if MariaDB is detected, as it has its own version + * numbering. */ if (isset($GLOBALS['dbi']) && !PMA_DRIZZLE @@ -575,6 +577,7 @@ if (isset($GLOBALS['dbi']) $_client_info = $GLOBALS['dbi']->getClientInfo(); if ($server > 0 && /*overload*/mb_strpos($_client_info, 'mysqlnd') === false + && /*overload*/mb_strpos(PMA_MYSQL_STR_VERSION, 'MariaDB') === false && substr(PMA_MYSQL_CLIENT_API, 0, 3) != substr( PMA_MYSQL_INT_VERSION, 0, 3 ) diff --git a/js/functions.js b/js/functions.js index 7921385060..7e9ea31389 100644 --- a/js/functions.js +++ b/js/functions.js @@ -1776,7 +1776,7 @@ function PMA_doc_add($elm, params) } var url = PMA_sprintf( - mysql_doc_template, + decodeURIComponent(mysql_doc_template), params[0] ); if (params.length > 1) { diff --git a/libraries/Config.class.php b/libraries/Config.class.php index 410612852c..7987669106 100644 --- a/libraries/Config.class.php +++ b/libraries/Config.class.php @@ -114,7 +114,7 @@ class PMA_Config */ function checkSystem() { - $this->set('PMA_VERSION', '4.3.10'); + $this->set('PMA_VERSION', '4.3.11.1'); /** * @deprecated */ diff --git a/libraries/DatabaseInterface.class.php b/libraries/DatabaseInterface.class.php index 1162c968fd..a61b71c81c 100644 --- a/libraries/DatabaseInterface.class.php +++ b/libraries/DatabaseInterface.class.php @@ -985,7 +985,13 @@ class PMA_DatabaseInterface } $sql .= $sql_where_schema . ' GROUP BY BINARY s.SCHEMA_NAME - ORDER BY BINARY ' . PMA_Util::backquote($sort_by) + ORDER BY '; + if ($sort_by == 'SCHEMA_NAME' + || $sort_by == 'DEFAULT_COLLATION_NAME' + ) { + $sql .= 'BINARY '; + } + $sql .= PMA_Util::backquote($sort_by) . ' ' . $sort_order . $limit; } diff --git a/libraries/Util.class.php b/libraries/Util.class.php index 4560ceffdc..40eaf0f567 100644 --- a/libraries/Util.class.php +++ b/libraries/Util.class.php @@ -3701,7 +3701,8 @@ class PMA_Util && empty($field['Default']) && empty($data) && ! isset($analyzed_sql_field_array['on_update_current_timestamp']) - && ($analyzed_sql_field_array['default_value'] != 'NULL') + && ! (isset($analyzed_sql_field_array['default_value']) + && $analyzed_sql_field_array['default_value'] == 'NULL') ) { $default_function = $cfg['DefaultFunctions']['first_timestamp']; } diff --git a/libraries/db_designer.lib.php b/libraries/db_designer.lib.php index a46e912167..0f4fd5479d 100644 --- a/libraries/db_designer.lib.php +++ b/libraries/db_designer.lib.php @@ -701,32 +701,32 @@ function PMA_getDatabaseTables( if (isset($tables_pk_or_unique_keys[$t_n . "." . $tab_column[$t_n]["COLUMN_NAME"][$j]])) { - $html .= '*'; - + $html .= '*'; } else { - $html .= 'getImgPath($image) . '" alt="*" />'; } $html .= htmlspecialchars( diff --git a/libraries/language_stats.inc.php b/libraries/language_stats.inc.php index e5d95e812e..3a75326266 100644 --- a/libraries/language_stats.inc.php +++ b/libraries/language_stats.inc.php @@ -5,7 +5,7 @@ $GLOBALS["language_stats"] = array ( 'af' => 10, 'ar' => 38, - 'az' => 53, + 'az' => 54, 'be@latin' => 27, 'be' => 27, 'bg' => 62, @@ -32,15 +32,15 @@ $GLOBALS["language_stats"] = array ( 'hr' => 33, 'hu' => 100, 'hy' => 3, - 'ia' => 64, + 'ia' => 68, 'id' => 75, 'it' => 81, - 'ja' => 73, + 'ja' => 74, 'ka' => 15, 'kk' => 10, 'km' => 6, 'kn' => 2, - 'ko' => 82, + 'ko' => 83, 'ksh' => 1, 'ky' => 1, 'lt' => 49, @@ -76,7 +76,7 @@ $GLOBALS["language_stats"] = array ( 'ur' => 20, 'uz@latin' => 36, 'uz' => 37, - 'vi' => 1, + 'vi' => 2, 'vls' => 3, 'zh_CN' => 82, 'zh_TW' => 97, diff --git a/libraries/mysql_charsets.inc.php b/libraries/mysql_charsets.inc.php index b335862632..d4d74e17df 100644 --- a/libraries/mysql_charsets.inc.php +++ b/libraries/mysql_charsets.inc.php @@ -43,43 +43,29 @@ if (! PMA_Util::cacheExists('mysql_charsets')) { : 'SELECT * FROM information_schema.COLLATIONS'; $res = $GLOBALS['dbi']->query($sql); while ($row = $GLOBALS['dbi']->fetchAssoc($res)) { - if (! is_array($mysql_collations[$row['CHARACTER_SET_NAME']])) { - $mysql_collations[$row['CHARACTER_SET_NAME']] - = array($row['COLLATION_NAME']); + $char_set_name = PMA_DRIZZLE + ? $row['DESCRIPTION'] + : $row['CHARACTER_SET_NAME']; + if (! is_array($mysql_collations[$char_set_name])) { + $mysql_collations[$char_set_name] = array($row['COLLATION_NAME']); } else { - $mysql_collations[$row['CHARACTER_SET_NAME']][] = $row['COLLATION_NAME']; + $mysql_collations[$char_set_name][] = $row['COLLATION_NAME']; } $mysql_collations_flat[] = $row['COLLATION_NAME']; if ($row['IS_DEFAULT'] == 'Yes' || $row['IS_DEFAULT'] == '1') { - $mysql_default_collations[$row['CHARACTER_SET_NAME']] + $mysql_default_collations[$char_set_name] = $row['COLLATION_NAME']; } //$mysql_collations_available[$row['Collation']] // = ! isset($row['Compiled']) || $row['Compiled'] == 'Yes'; $mysql_collations_available[$row['COLLATION_NAME']] = true; - $mysql_charsets_available[$row['CHARACTER_SET_NAME']] - = !empty($mysql_charsets_available[$row['CHARACTER_SET_NAME']]) + $mysql_charsets_available[$char_set_name] + = !empty($mysql_charsets_available[$char_set_name]) || !empty($mysql_collations_available[$row['COLLATION_NAME']]); } $GLOBALS['dbi']->freeResult($res); unset($res, $row); - if (PMA_DRIZZLE - && isset($mysql_collations['utf8_general_ci']) - && isset($mysql_collations['utf8']) - ) { - $mysql_collations['utf8'] = $mysql_collations['utf8_general_ci']; - $mysql_default_collations['utf8'] - = $mysql_default_collations['utf8_general_ci']; - $mysql_charsets_available['utf8'] - = $mysql_charsets_available['utf8_general_ci']; - unset( - $mysql_collations['utf8_general_ci'], - $mysql_default_collations['utf8_general_ci'], - $mysql_charsets_available['utf8_general_ci'] - ); - } - sort($mysql_collations_flat, SORT_STRING); foreach ($mysql_collations as $key => $value) { sort($mysql_collations[$key], SORT_STRING); diff --git a/libraries/select_lang.lib.php b/libraries/select_lang.lib.php index 2bd1a8d8f1..6712eb68d1 100644 --- a/libraries/select_lang.lib.php +++ b/libraries/select_lang.lib.php @@ -600,34 +600,14 @@ $GLOBALS['l']['w_page'] = __('Page number:'); // now, that we have loaded the language strings we can send the errors -if ($GLOBALS['lang_failed_cfg']) { +if ($GLOBALS['lang_failed_cfg'] + || $GLOBALS['lang_failed_cookie'] + || $GLOBALS['lang_failed_request']) { trigger_error( - sprintf( - __('Unknown language: %1$s.'), - htmlspecialchars($GLOBALS['lang_failed_cfg']) - ), + __('Ignoring unsupported language code.'), E_USER_ERROR ); } -if ($GLOBALS['lang_failed_cookie']) { - trigger_error( - sprintf( - __('Unknown language: %1$s.'), - htmlspecialchars($GLOBALS['lang_failed_cookie']) - ), - E_USER_ERROR - ); -} -if ($GLOBALS['lang_failed_request']) { - trigger_error( - sprintf( - __('Unknown language: %1$s.'), - htmlspecialchars($GLOBALS['lang_failed_request']) - ), - E_USER_ERROR - ); -} - unset( $line, $fall_back_lang, $GLOBALS['lang_failed_cfg'], $GLOBALS['lang_failed_cookie'], $GLOBALS['lang_failed_request'] diff --git a/libraries/user_preferences.lib.php b/libraries/user_preferences.lib.php index 94b91e8204..33ddeabe40 100644 --- a/libraries/user_preferences.lib.php +++ b/libraries/user_preferences.lib.php @@ -110,17 +110,18 @@ function PMA_saveUserprefs(array $config_array) $config_data = json_encode($config_array); if ($has_config) { $query = 'UPDATE ' . $query_table - . ' SET `config_data` = \'' + . ' SET `timevalue` = NOW(), `config_data` = \'' . PMA_Util::sqlAddSlashes($config_data) . '\'' . ' WHERE `username` = \'' . PMA_Util::sqlAddSlashes($cfgRelation['user']) . '\''; } else { - $query = 'INSERT INTO ' . $query_table . ' (`username`, `config_data`) ' + $query = 'INSERT INTO ' . $query_table + . ' (`username`, `timevalue`,`config_data`) ' . 'VALUES (\'' - . PMA_Util::sqlAddSlashes($cfgRelation['user']) . '\', \'' - . PMA_Util::sqlAddSlashes($config_data) . '\')'; + . PMA_Util::sqlAddSlashes($cfgRelation['user']) . '\', NOW(), ' + . '\'' . PMA_Util::sqlAddSlashes($config_data) . '\')'; } if (isset($_SESSION['cache'][$cache_key]['userprefs'])) { unset($_SESSION['cache'][$cache_key]['userprefs']); diff --git a/locale/az/LC_MESSAGES/phpmyadmin.mo b/locale/az/LC_MESSAGES/phpmyadmin.mo index 0df6bc1df8..b1c91fbb4d 100644 Binary files a/locale/az/LC_MESSAGES/phpmyadmin.mo and b/locale/az/LC_MESSAGES/phpmyadmin.mo differ diff --git a/locale/da/LC_MESSAGES/phpmyadmin.mo b/locale/da/LC_MESSAGES/phpmyadmin.mo index bad0e9dcf8..f6f0829ffb 100644 Binary files a/locale/da/LC_MESSAGES/phpmyadmin.mo and b/locale/da/LC_MESSAGES/phpmyadmin.mo differ diff --git a/locale/el/LC_MESSAGES/phpmyadmin.mo b/locale/el/LC_MESSAGES/phpmyadmin.mo index 57dd5ddc69..e40d219432 100644 Binary files a/locale/el/LC_MESSAGES/phpmyadmin.mo and b/locale/el/LC_MESSAGES/phpmyadmin.mo differ diff --git a/locale/ia/LC_MESSAGES/phpmyadmin.mo b/locale/ia/LC_MESSAGES/phpmyadmin.mo index 58d25f018a..799e6def5d 100644 Binary files a/locale/ia/LC_MESSAGES/phpmyadmin.mo and b/locale/ia/LC_MESSAGES/phpmyadmin.mo differ diff --git a/locale/ja/LC_MESSAGES/phpmyadmin.mo b/locale/ja/LC_MESSAGES/phpmyadmin.mo index 6d48dc8d8c..6e098a6ec4 100644 Binary files a/locale/ja/LC_MESSAGES/phpmyadmin.mo and b/locale/ja/LC_MESSAGES/phpmyadmin.mo differ diff --git a/locale/ko/LC_MESSAGES/phpmyadmin.mo b/locale/ko/LC_MESSAGES/phpmyadmin.mo index 9d48f1f1a7..e0e07b9cb3 100644 Binary files a/locale/ko/LC_MESSAGES/phpmyadmin.mo and b/locale/ko/LC_MESSAGES/phpmyadmin.mo differ diff --git a/locale/zh_CN/LC_MESSAGES/phpmyadmin.mo b/locale/zh_CN/LC_MESSAGES/phpmyadmin.mo index 382cc89776..943bdbcc0d 100644 Binary files a/locale/zh_CN/LC_MESSAGES/phpmyadmin.mo and b/locale/zh_CN/LC_MESSAGES/phpmyadmin.mo differ diff --git a/themes/pmahomme/css/common.css.php b/themes/pmahomme/css/common.css.php index 19f6664fa8..37923990c0 100644 --- a/themes/pmahomme/css/common.css.php +++ b/themes/pmahomme/css/common.css.php @@ -324,10 +324,12 @@ input.button:disabled { textarea { overflow: visible; + margin: 6px; height: em; } textarea.char { + margin: 6px; height: em; } @@ -3414,4 +3416,4 @@ th.headerSortUp .sorticon, th.headerSortDown:hover .sorticon { th.headerSortDown .sorticon, th.headerSortUp:hover .sorticon { background-image: url(getImgPath('s_asc.png');?>); } -/* end of styles of sortable tables */ \ No newline at end of file +/* end of styles of sortable tables */