From de250fbae3d8bb5f68ef816f63abd9d04e792ff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Tue, 8 May 2018 07:39:53 -0300 Subject: [PATCH] Fix MariaDB 10.2 current_timestamp() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #13968 and fixes #13999. Closes #14177. Signed-off-by: MaurĂ­cio Meneghini Fauth --- ChangeLog | 1 + js/functions.js | 2 +- js/tbl_change.js | 2 +- libraries/classes/CentralColumns.php | 11 ++++++++--- .../Controllers/Table/TableStructureController.php | 3 ++- libraries/classes/InsertEdit.php | 3 ++- libraries/classes/Table.php | 1 + libraries/classes/Util.php | 9 +++++---- libraries/tbl_columns_definition_form.inc.php | 2 ++ test/classes/TableTest.php | 13 +++++++++++++ 10 files changed, 36 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4e4d42820a..53b6c28365 100644 --- a/ChangeLog +++ b/ChangeLog @@ -13,6 +13,7 @@ phpMyAdmin - ChangeLog - issue #14239 Line and some other charts ignore result set order of values chosen for the x-axis - issue #14260 Fixed configuration for DefaultLang and Lang - issue #14264 Linking for 'Distinct values' broken +- issue #13968 Fix MariaDB 10.2 current_timestamp() 4.8.0.1 (2018-04-19) - issue [security] Multiple CSRF vulnerabilities, See PMASA-2018-02 diff --git a/js/functions.js b/js/functions.js index 16b85178e2..698dfb2208 100644 --- a/js/functions.js +++ b/js/functions.js @@ -3291,7 +3291,7 @@ function autoPopulate (input_id, offset) { } var col_default = central_column_list[db + '_' + table][offset].col_default.toUpperCase(); var $input4 = $('#' + input_id + '4'); - if (col_default !== '' && col_default !== 'NULL' && col_default !== 'CURRENT_TIMESTAMP') { + if (col_default !== '' && col_default !== 'NULL' && col_default !== 'CURRENT_TIMESTAMP' && col_default !== 'CURRENT_TIMESTAMP()') { $input4.val('USER_DEFINED'); $input4.next().next().show(); $input4.next().next().val(central_column_list[db + '_' + table][offset].col_default); diff --git a/js/tbl_change.js b/js/tbl_change.js index 0c794cbdb3..501ff3ba48 100644 --- a/js/tbl_change.js +++ b/js/tbl_change.js @@ -347,7 +347,7 @@ AJAX.registerOnload('tbl_change.js', function () { } else if (theType === 'datetime' || theType === 'timestamp') { var tmstmp = false; dt_value = dt_value.trim(); - if (dt_value === 'CURRENT_TIMESTAMP') { + if (dt_value === 'CURRENT_TIMESTAMP' || dt_value === 'current_timestamp()') { return true; } if (theType === 'timestamp') { diff --git a/libraries/classes/CentralColumns.php b/libraries/classes/CentralColumns.php index 88a5a832a2..555195c95d 100644 --- a/libraries/classes/CentralColumns.php +++ b/libraries/classes/CentralColumns.php @@ -514,7 +514,8 @@ class CentralColumns $query .= ' ' . $column['col_extra']; if ($column['col_default']) { - if ($column['col_default'] != 'CURRENT_TIMESTAMP') { + if ($column['col_default'] != 'CURRENT_TIMESTAMP' + || $column['col_default'] != 'current_timestamp()') { $query .= ' DEFAULT \'' . $this->dbi->escapeString( $column['col_default'] ) . '\''; @@ -936,8 +937,10 @@ class CentralColumns $meta['DefaultType'] = 'NONE'; } else { if ($row['col_default'] == 'CURRENT_TIMESTAMP' - || $row['col_default'] == 'NULL' + || $row['col_default'] == 'current_timestamp()' ) { + $meta['DefaultType'] = 'CURRENT_TIMESTAMP'; + } elseif ($row['col_default'] == 'NULL') { $meta['DefaultType'] = $row['col_default']; } else { $meta['DefaultType'] = 'USER_DEFINED'; @@ -1083,8 +1086,10 @@ class CentralColumns $meta['DefaultType'] = 'NONE'; } else { if ($row['col_default'] == 'CURRENT_TIMESTAMP' - || $row['col_default'] == 'NULL' + || $row['col_default'] == 'current_timestamp()' ) { + $meta['DefaultType'] = 'CURRENT_TIMESTAMP'; + } elseif ($row['col_default'] == 'NULL') { $meta['DefaultType'] = $row['col_default']; } else { $meta['DefaultType'] = 'USER_DEFINED'; diff --git a/libraries/classes/Controllers/Table/TableStructureController.php b/libraries/classes/Controllers/Table/TableStructureController.php index f60fc3cbd9..83bacb9903 100644 --- a/libraries/classes/Controllers/Table/TableStructureController.php +++ b/libraries/classes/Controllers/Table/TableStructureController.php @@ -417,7 +417,8 @@ class TableStructureController extends TableController } $current_timestamp = ($data['Type'] == 'timestamp' || $data['Type'] == 'datetime') - && $data['Default'] == 'CURRENT_TIMESTAMP'; + && ($data['Default'] == 'CURRENT_TIMESTAMP' + || $data['Default'] == 'current_timestamp()'); if ($data['Null'] === 'YES' && $data['Default'] === null) { $default_type = 'NULL'; diff --git a/libraries/classes/InsertEdit.php b/libraries/classes/InsertEdit.php index 362fe6c51c..c18e3797d6 100644 --- a/libraries/classes/InsertEdit.php +++ b/libraries/classes/InsertEdit.php @@ -2753,7 +2753,8 @@ class InsertEdit $current_value = "b'" . $this->dbi->escapeString($current_value) . "'"; } elseif (! ($type == 'datetime' || $type == 'timestamp') - || $current_value != 'CURRENT_TIMESTAMP' + || ($current_value != 'CURRENT_TIMESTAMP' + && $current_value != 'current_timestamp()') ) { $current_value = "'" . $this->dbi->escapeString($current_value) . "'"; diff --git a/libraries/classes/Table.php b/libraries/classes/Table.php index 7f3f7851e9..3e9e32ca95 100644 --- a/libraries/classes/Table.php +++ b/libraries/classes/Table.php @@ -566,6 +566,7 @@ class Table } // else fall-through intended, no break here case 'CURRENT_TIMESTAMP' : + case 'current_timestamp()': $query .= ' DEFAULT ' . $default_type; if (strlen($length) !== 0 diff --git a/libraries/classes/Util.php b/libraries/classes/Util.php index 846a692ff1..661b72d87e 100644 --- a/libraries/classes/Util.php +++ b/libraries/classes/Util.php @@ -1767,12 +1767,12 @@ class Util */ $tag_params_strings[] = 'data-post="' . (isset($parts[1]) ? $parts[1] : '') . '"'; $url = $parts[0]; - if(array_key_exists('class', $tag_params) + if(array_key_exists('class', $tag_params) && strpos($tag_params['class'], 'create_view') !== false ) { - $url .= '?' . explode('&', $parts[1], 2)[0]; + $url .= '?' . explode('&', $parts[1], 2)[0]; } - + } foreach ($tag_params as $par_name => $par_value) { @@ -4025,7 +4025,8 @@ class Util */ public static function addMicroseconds($value) { - if (empty($value) || $value == 'CURRENT_TIMESTAMP') { + if (empty($value) || $value == 'CURRENT_TIMESTAMP' + || $value == 'current_timestamp()') { return $value; } diff --git a/libraries/tbl_columns_definition_form.inc.php b/libraries/tbl_columns_definition_form.inc.php index e067d3d1b3..753c045455 100644 --- a/libraries/tbl_columns_definition_form.inc.php +++ b/libraries/tbl_columns_definition_form.inc.php @@ -203,6 +203,7 @@ for ($columnNumber = 0; $columnNumber < $num_fields; $columnNumber++) { break; case 'NULL': case 'CURRENT_TIMESTAMP': + case 'current_timestamp()': $columnMeta['Default'] = $columnMeta['DefaultType']; break; } @@ -256,6 +257,7 @@ for ($columnNumber = 0; $columnNumber < $num_fields; $columnNumber++) { } break; case 'CURRENT_TIMESTAMP': + case 'current_timestamp()': $columnMeta['DefaultType'] = 'CURRENT_TIMESTAMP'; $columnMeta['DefaultValue'] = ''; break; diff --git a/test/classes/TableTest.php b/test/classes/TableTest.php index 3c42ad7058..99e7352c6d 100644 --- a/test/classes/TableTest.php +++ b/test/classes/TableTest.php @@ -523,6 +523,19 @@ class TableTest extends PmaTestCase $query ); + //$default_type is current_timestamp() + $default_type = 'current_timestamp()'; + $query = Table::generateFieldSpec( + $name, $type, $length, $attribute, $collation, + $null, $default_type, $default_value, $extra, $comment, + $virtuality, $expression, $move_to + ); + $this->assertEquals( + "`PMA_name` BOOLEAN PMA_attribute NULL DEFAULT current_timestamp() " + . "AUTO_INCREMENT COMMENT 'PMA_comment' FIRST", + $query + ); + // $type is 'TIMESTAMP(3), $default_type is CURRENT_TIMESTAMP(3) $type = 'TIMESTAMP'; $length = '3';