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 */