From 1113ba080bd9c28c280621b6ab14c753938f10d5 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Tue, 22 Sep 2015 21:35:05 +1000 Subject: [PATCH 01/79] Fix #11464 phpMyAdmin suggests upgrading to newer version not usable on that system Signed-off-by: Madhura Jayaratne --- ChangeLog | 3 + js/functions.js | 2 +- libraries/Util.class.php | 151 ------------- libraries/VersionInformation.php | 270 +++++++++++++++++++++++ setup/frames/index.inc.php | 1 + setup/lib/index.lib.php | 17 +- test/classes/PMA_Util_test.php | 66 ------ test/classes/VersionInformation_test.php | 260 ++++++++++++++++++++++ version_check.php | 19 +- 9 files changed, 562 insertions(+), 227 deletions(-) create mode 100644 libraries/VersionInformation.php create mode 100644 test/classes/VersionInformation_test.php diff --git a/ChangeLog b/ChangeLog index dc4a3f07de..9afeb57a84 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,9 @@ phpMyAdmin - ChangeLog ====================== +4.4.15.1 (not yet released) +- issue #11464 phpMyAdmin suggests upgrading to newer version not usable on that system + 4.4.15.0 (2015-09-20) - issue #11411 Undefined "replace" function on numeric scalar - issue #11421 Stored-proc / routine - broken parameter parsing diff --git a/js/functions.js b/js/functions.js index d8f5eb61d9..d35e2b87ca 100644 --- a/js/functions.js +++ b/js/functions.js @@ -3812,7 +3812,7 @@ AJAX.registerOnload('functions.js', function () { * Load version information asynchronously. */ if ($('li.jsversioncheck').length > 0) { - $.getJSON('version_check.php', {}, PMA_current_version); + $.getJSON('version_check.php', {'server' : PMA_commonParams.get('server')}, PMA_current_version); } if ($('#is_git_revision').length > 0) { diff --git a/libraries/Util.class.php b/libraries/Util.class.php index 04e504ef9b..9d3491f8d1 100644 --- a/libraries/Util.class.php +++ b/libraries/Util.class.php @@ -4249,157 +4249,6 @@ class PMA_Util curl_setopt($curl_handle, CURLOPT_USERAGENT, 'phpMyAdmin/' . PMA_VERSION); return $curl_handle; } - /** - * Returns information with latest version from phpmyadmin.net - * - * @return object JSON decoded object with the data - */ - public static function getLatestVersion() - { - // wait 3s at most for server response, it's enough to get information - // from a working server - $connection_timeout = 3; - - $response = '{}'; - // Get response text from phpmyadmin.net or from the session - // Update cache every 6 hours - if (isset($_SESSION['cache']['version_check']) - && time() < $_SESSION['cache']['version_check']['timestamp'] + 3600 * 6 - ) { - $save = false; - $response = $_SESSION['cache']['version_check']['response']; - } else { - $save = true; - $file = 'https://www.phpmyadmin.net/home_page/version.json'; - if (ini_get('allow_url_fopen')) { - $context = array( - 'http' => array( - 'request_fulluri' => true, - 'timeout' => $connection_timeout, - ) - ); - $context = PMA_Util::handleContext($context); - if (! defined('TESTSUITE')) { - session_write_close(); - } - $response = file_get_contents( - $file, - false, - stream_context_create($context) - ); - } else if (function_exists('curl_init')) { - $curl_handle = curl_init($file); - if ($curl_handle === false) { - return null; - } - $curl_handle = PMA_Util::configureCurl($curl_handle); - curl_setopt( - $curl_handle, - CURLOPT_HEADER, - false - ); - curl_setopt( - $curl_handle, - CURLOPT_RETURNTRANSFER, - true - ); - curl_setopt( - $curl_handle, - CURLOPT_TIMEOUT, - $connection_timeout - ); - if (! defined('TESTSUITE')) { - session_write_close(); - } - $response = curl_exec($curl_handle); - } - } - - $data = json_decode($response); - if (is_object($data) - && ! empty($data->version) - && ! empty($data->date) - && $save - ) { - if (! isset($_SESSION) && ! defined('TESTSUITE')) { - ini_set('session.use_only_cookies', 'false'); - ini_set('session.use_cookies', 'false'); - ini_set('session.use_trans_sid', 'false'); - ini_set('session.cache_limiter', 'nocache'); - session_start(); - } - $_SESSION['cache']['version_check'] = array( - 'response' => $response, - 'timestamp' => time() - ); - } - return $data; - } - - /** - * Calculates numerical equivalent of phpMyAdmin version string - * - * @param string $version version - * - * @return mixed false on failure, integer on success - */ - public static function versionToInt($version) - { - $parts = explode('-', $version); - if (count($parts) > 1) { - $suffix = $parts[1]; - } else { - $suffix = ''; - } - $parts = explode('.', $parts[0]); - - $result = 0; - - if (count($parts) >= 1 && is_numeric($parts[0])) { - $result += 1000000 * $parts[0]; - } - - if (count($parts) >= 2 && is_numeric($parts[1])) { - $result += 10000 * $parts[1]; - } - - if (count($parts) >= 3 && is_numeric($parts[2])) { - $result += 100 * $parts[2]; - } - - if (count($parts) >= 4 && is_numeric($parts[3])) { - $result += 1 * $parts[3]; - } - - if (!empty($suffix)) { - $matches = array(); - if (preg_match('/^(\D+)(\d+)$/', $suffix, $matches)) { - $suffix = $matches[1]; - $result += intval($matches[2]); - } - switch ($suffix) { - case 'pl': - $result += 60; - break; - case 'rc': - $result += 30; - break; - case 'beta': - $result += 20; - break; - case 'alpha': - $result += 10; - break; - case 'dev': - $result += 0; - break; - } - } else { - $result += 50; // for final - } - - return $result; - } /** * Add fractional seconds to time, datetime and timestamp strings. diff --git a/libraries/VersionInformation.php b/libraries/VersionInformation.php new file mode 100644 index 0000000000..c7363f8da7 --- /dev/null +++ b/libraries/VersionInformation.php @@ -0,0 +1,270 @@ + array( + 'request_fulluri' => true, + 'timeout' => $connection_timeout, + ) + ); + $context = PMA_Util::handleContext($context); + if (! defined('TESTSUITE')) { + session_write_close(); + } + $response = file_get_contents( + $file, + false, + stream_context_create($context) + ); + } else if (function_exists('curl_init')) { + $curl_handle = curl_init($file); + if ($curl_handle === false) { + return null; + } + $curl_handle = PMA_Util::configureCurl($curl_handle); + curl_setopt( + $curl_handle, + CURLOPT_HEADER, + false + ); + curl_setopt( + $curl_handle, + CURLOPT_RETURNTRANSFER, + true + ); + curl_setopt( + $curl_handle, + CURLOPT_TIMEOUT, + $connection_timeout + ); + if (! defined('TESTSUITE')) { + session_write_close(); + } + $response = curl_exec($curl_handle); + } + } + + $data = json_decode($response); + if (is_object($data) + && ! empty($data->version) + && ! empty($data->date) + && $save + ) { + if (! isset($_SESSION) && ! defined('TESTSUITE')) { + ini_set('session.use_only_cookies', 'false'); + ini_set('session.use_cookies', 'false'); + ini_set('session.use_trans_sid', 'false'); + ini_set('session.cache_limiter', 'nocache'); + session_start(); + } + $_SESSION['cache']['version_check'] = array( + 'response' => $response, + 'timestamp' => time() + ); + } + return $data; + } + + /** + * Calculates numerical equivalent of phpMyAdmin version string + * + * @param string $version version + * + * @return mixed false on failure, integer on success + */ + public function versionToInt($version) + { + $parts = explode('-', $version); + if (count($parts) > 1) { + $suffix = $parts[1]; + } else { + $suffix = ''; + } + $parts = explode('.', $parts[0]); + + $result = 0; + + if (count($parts) >= 1 && is_numeric($parts[0])) { + $result += 1000000 * $parts[0]; + } + + if (count($parts) >= 2 && is_numeric($parts[1])) { + $result += 10000 * $parts[1]; + } + + if (count($parts) >= 3 && is_numeric($parts[2])) { + $result += 100 * $parts[2]; + } + + if (count($parts) >= 4 && is_numeric($parts[3])) { + $result += 1 * $parts[3]; + } + + if (!empty($suffix)) { + $matches = array(); + if (preg_match('/^(\D+)(\d+)$/', $suffix, $matches)) { + $suffix = $matches[1]; + $result += intval($matches[2]); + } + switch ($suffix) { + case 'pl': + $result += 60; + break; + case 'rc': + $result += 30; + break; + case 'beta': + $result += 20; + break; + case 'alpha': + $result += 10; + break; + case 'dev': + $result += 0; + break; + } + } else { + $result += 50; // for final + } + + return $result; + } + + /** + * Returns the version and date of the latest phpMyAdmin version compatible + * with avilable PHP and MySQL versions + * + * @param array $releases array of information related to each version + * + * @return array containing the version and date of latest compatibel version + */ + public function getLatestCompatibleVersion($releases) + { + foreach ($releases as $release) { + $phpVersions = $release->php_versions; + $phpConditions = explode(",", $phpVersions); + foreach ($phpConditions as $phpCondition) { + if (! $this->evaluateVersionCondition("PHP", $phpCondition)) { + continue 2; + } + } + + // We evalute MySQL version constraint if there are only + // one server configured. + if (count($GLOBALS['cfg']['Servers']) == 1) { + $mysqlVersions = $release->mysql_versions; + $mysqlConditions = explode(",", $mysqlVersions); + foreach ($mysqlConditions as $mysqlCondition) { + if (! $this->evaluateVersionCondition('MySQL', $mysqlCondition)) { + continue 2; + } + } + } + + return array( + 'version' => $release->version, + 'date' => $release->date, + ); + } + + // no compatible version + return null; + } + + /** + * Checks whether PHP or MySQL version meets supplied version condition + * + * @param string $type PHP or MySQL + * @param string $condition version condition + * + * @return boolean whether the condition is met + */ + public function evaluateVersionCondition($type, $condition) + { + $operator = null; + $operators = array("<=", ">=", "!=", "<>", "<", ">", "="); // preserve order + foreach ($operators as $oneOperator) { + if (strpos($condition, $oneOperator) === 0) { + $operator = $oneOperator; + $version = substr($condition, strlen($oneOperator)); + break; + } + } + + $myVersion = null; + if ($type == 'PHP') { + $myVersion = $this->getPHPVersion(); + } elseif ($type == 'MySQL') { + $myVersion = $this->getMySQLVersion(); + } + + if ($myVersion != null && $operator != null) { + return version_compare($myVersion, $version, $operator); + } + return false; + } + + /** + * Returns the PHP version + * + * @return string PHP version + */ + protected function getPHPVersion() + { + return PHP_VERSION; + } + + /** + * Returns the MySQL version + * + * @return string MySQL version + */ + protected function getMySQLVersion() + { + return PMA_Util::cacheGet('PMA_MYSQL_STR_VERSION'); + } +} +?> \ No newline at end of file diff --git a/setup/frames/index.inc.php b/setup/frames/index.inc.php index 5f9a207656..ed6902a53f 100644 --- a/setup/frames/index.inc.php +++ b/setup/frames/index.inc.php @@ -16,6 +16,7 @@ if (!defined('PHPMYADMIN')) { require_once './libraries/display_select_lang.lib.php'; require_once './libraries/config/FormDisplay.class.php'; require_once './libraries/config/ServerConfigChecks.class.php'; +require_once './libraries/VersionInformation.php'; require_once './setup/lib/index.lib.php'; // prepare unfiltered language list diff --git a/setup/lib/index.lib.php b/setup/lib/index.lib.php index 586c45b779..ac07d27db9 100644 --- a/setup/lib/index.lib.php +++ b/setup/lib/index.lib.php @@ -108,7 +108,8 @@ function PMA_versionCheck() $message_id = uniqid('version_check'); // Fetch data - $version_data = PMA_Util::getLatestVersion(); + $versionInformation = new VersionInformation(); + $version_data = $versionInformation->getLatestVersion(); if (empty($version_data)) { PMA_messagesSet( @@ -123,10 +124,16 @@ function PMA_versionCheck() return; } - $version = $version_data->version; - $date = $version_data->date; + $releases = $version_data->releases; + $latestCompatible = $versionInformation->getLatestCompatibleVersion($releases); + if ($latestCompatible != null) { + $version = $latestCompatible['version']; + $date = $latestCompatible['date']; + } else { + return; + } - $version_upstream = PMA_Util::versionToInt($version); + $version_upstream = $versionInformation->versionToInt($version); if ($version_upstream === false) { PMA_messagesSet( 'error', @@ -137,7 +144,7 @@ function PMA_versionCheck() return; } - $version_local = PMA_Util::versionToInt( + $version_local = $versionInformation->versionToInt( $GLOBALS['PMA_Config']->get('PMA_VERSION') ); if ($version_local === false) { diff --git a/test/classes/PMA_Util_test.php b/test/classes/PMA_Util_test.php index 73657acf91..407430bd1d 100644 --- a/test/classes/PMA_Util_test.php +++ b/test/classes/PMA_Util_test.php @@ -106,70 +106,4 @@ class PMA_Util_Test extends PHPUnit_Framework_TestCase PMA_Util::pageselector("pma", 3) ); } - - /** - * Test version checking - * - * @return void - * - * @group large - */ - /* - public function testGetLatestVersion() - { - $GLOBALS['cfg']['ProxyUrl'] = ''; - $GLOBALS['cfg']['VersionCheckProxyUrl'] = ''; - $version = PMA_Util::getLatestVersion(); - $this->assertNotEmpty($version->version); - $this->assertNotEmpty($version->date); - } - */ - /** - * Test version to int conversion. - * - * @param string $version Version string - * @param int $numeric Integer matching version - * - * @return void - * - * @dataProvider dataVersions - */ - public function testVersionToInt($version, $numeric) - { - $this->assertEquals( - $numeric, - PMA_Util::versionToInt($version) - ); - } - - /** - * Data provider for version parsing - * - * @return array with test data - */ - public function dataVersions() - { - return array( - array('1.0.0', 1000050), - array('2.0.0.2-dev', 2000002), - array('3.4.2.1', 3040251), - array('3.4.2-dev3', 3040203), - array('3.4.2-dev', 3040200), - array('3.4.2-pl', 3040260), - array('3.4.2-pl3', 3040263), - array('4.4.2-rc22', 4040252), - array('4.4.2-rc', 4040230), - array('4.4.22-beta22', 4042242), - array('4.4.22-beta', 4042220), - array('4.4.21-alpha22', 4042132), - array('4.4.20-alpha', 4042010), - array('4.40.20-alpha-dev', 4402010), - array('4.4a', 4000050), - array('4.4.4-test', 4040400), - array('4.1.0', 4010050), - array('4.0.1.3', 4000153), - array('4.1-dev', 4010000), - ); - } - } diff --git a/test/classes/VersionInformation_test.php b/test/classes/VersionInformation_test.php new file mode 100644 index 0000000000..e1a0c8e5e8 --- /dev/null +++ b/test/classes/VersionInformation_test.php @@ -0,0 +1,260 @@ +_releases = array(); + + $release = new stdClass(); + $release->date = "2015-09-08"; + $release->php_versions = ">=5.3,<7.1"; + $release->version = "4.4.14.1"; + $release->mysql_versions = ">=5.5"; + $this->_releases[] = $release; + + $release = new stdClass(); + $release->date = "2015-09-09"; + $release->php_versions = ">=5.3,<7.0"; + $release->version = "4.4.13.3"; + $release->mysql_versions = ">=5.5"; + $this->_releases[] = $release; + + $release = new stdClass(); + $release->date = "2015-05-13"; + $release->php_versions = ">=5.2,<5.3"; + $release->version = "4.0.10.10"; + $release->mysql_versions = ">=5.0"; + $this->_releases[] = $release; + } + + /** + * Test version checking + * + * @return void + * + * @group large + */ + /* + public function testGetLatestVersion() + { + $GLOBALS['cfg']['ProxyUrl'] = ''; + $GLOBALS['cfg']['VersionCheckProxyUrl'] = ''; + $versionInformation = new VersionInformation(); + $version = $versionInformation->getLatestVersion(); + $this->assertNotEmpty($version->version); + $this->assertNotEmpty($version->date); + } + */ + + /** + * Test version to int conversion. + * + * @param string $version Version string + * @param int $numeric Integer matching version + * + * @return void + * + * @dataProvider dataVersions + */ + public function testVersionToInt($version, $numeric) + { + $versionInformation = new VersionInformation(); + $this->assertEquals( + $numeric, + $versionInformation->versionToInt($version) + ); + } + + + /** + * Data provider for version parsing + * + * @return array with test data + */ + public function dataVersions() + { + return array( + array('1.0.0', 1000050), + array('2.0.0.2-dev', 2000002), + array('3.4.2.1', 3040251), + array('3.4.2-dev3', 3040203), + array('3.4.2-dev', 3040200), + array('3.4.2-pl', 3040260), + array('3.4.2-pl3', 3040263), + array('4.4.2-rc22', 4040252), + array('4.4.2-rc', 4040230), + array('4.4.22-beta22', 4042242), + array('4.4.22-beta', 4042220), + array('4.4.21-alpha22', 4042132), + array('4.4.20-alpha', 4042010), + array('4.40.20-alpha-dev', 4402010), + array('4.4a', 4000050), + array('4.4.4-test', 4040400), + array('4.1.0', 4010050), + array('4.0.1.3', 4000153), + array('4.1-dev', 4010000), + ); + } + + /** + * Tests getLatestCompatibleVersion() when there is only one server confgiured + * + * @return void + */ + public function testGetLatestCompatibleVersionWithSingleServer() + { + $GLOBALS['cfg']['Servers'] = array( + array() + ); + + $mockVersionInfo = $this->getMockBuilder('VersionInformation') + ->setMethods(array('evaluateVersionCondition')) + ->getMock(); + + $mockVersionInfo->expects($this->at(0)) + ->method('evaluateVersionCondition') + ->with('PHP', '>=5.3') + ->will($this->returnValue(true)); + + $mockVersionInfo->expects($this->at(1)) + ->method('evaluateVersionCondition') + ->with('PHP', '<7.1') + ->will($this->returnValue(true)); + + $mockVersionInfo->expects($this->at(2)) + ->method('evaluateVersionCondition') + ->with('MySQL', '>=5.5') + ->will($this->returnValue(true)); + + $compatible = $mockVersionInfo + ->getLatestCompatibleVersion($this->_releases); + $this->assertEquals('4.4.14.1', $compatible['version']); + + } + + /** + * Tests getLatestCompatibleVersion() when there are multiple servers configured + * + * @return void + */ + public function testGetLaestCompatibleVersionWithMultipleServers() + { + $GLOBALS['cfg']['Servers'] = array( + array(), + array() + ); + + $mockVersionInfo = $this->getMockBuilder('VersionInformation') + ->setMethods(array('evaluateVersionCondition')) + ->getMock(); + + $mockVersionInfo->expects($this->at(0)) + ->method('evaluateVersionCondition') + ->with('PHP', '>=5.3') + ->will($this->returnValue(true)); + + $mockVersionInfo->expects($this->at(1)) + ->method('evaluateVersionCondition') + ->with('PHP', '<7.1') + ->will($this->returnValue(true)); + + $compatible = $mockVersionInfo + ->getLatestCompatibleVersion($this->_releases); + $this->assertEquals('4.4.14.1', $compatible['version']); + } + + /** + * Tests getLatestCompatibleVersion() with an old PHP version + * + * @return void + */ + public function testGetLaestCompatibleVersionWithOldPHPVersion() + { + $GLOBALS['cfg']['Servers'] = array( + array(), + array() + ); + + $mockVersionInfo = $this->getMockBuilder('VersionInformation') + ->setMethods(array('evaluateVersionCondition')) + ->getMock(); + + $mockVersionInfo->expects($this->at(0)) + ->method('evaluateVersionCondition') + ->with('PHP', '>=5.3') + ->will($this->returnValue(false)); + + $mockVersionInfo->expects($this->at(1)) + ->method('evaluateVersionCondition') + ->with('PHP', '>=5.3') + ->will($this->returnValue(false)); + + $mockVersionInfo->expects($this->at(2)) + ->method('evaluateVersionCondition') + ->with('PHP', '>=5.2') + ->will($this->returnValue(true)); + + $mockVersionInfo->expects($this->at(3)) + ->method('evaluateVersionCondition') + ->with('PHP', '<5.3') + ->will($this->returnValue(true)); + + $compatible = $mockVersionInfo + ->getLatestCompatibleVersion($this->_releases); + $this->assertEquals('4.0.10.10', $compatible['version']); + } + + /** + * Tests evaluateVersionCondition() method + * + * @return void + */ + public function testEvaluateVersionCondition() + { + $mockVersionInfo = $this->getMockBuilder('VersionInformation') + ->setMethods(array('getPHPVersion')) + ->getMock(); + + $mockVersionInfo->expects($this->any()) + ->method('getPHPVersion') + ->will($this->returnValue('5.2.4')); + + $this->assertTrue($mockVersionInfo->evaluateVersionCondition('PHP', '<=5.3')); + $this->assertTrue($mockVersionInfo->evaluateVersionCondition('PHP', '<5.3')); + $this->assertTrue($mockVersionInfo->evaluateVersionCondition('PHP', '>=5.2')); + $this->assertTrue($mockVersionInfo->evaluateVersionCondition('PHP', '>5.2')); + $this->assertTrue($mockVersionInfo->evaluateVersionCondition('PHP', '!=5.3')); + + $this->assertFalse($mockVersionInfo->evaluateVersionCondition('PHP', '<=5.2')); + $this->assertFalse($mockVersionInfo->evaluateVersionCondition('PHP', '<5.2')); + $this->assertFalse($mockVersionInfo->evaluateVersionCondition('PHP', '>=7.0')); + $this->assertFalse($mockVersionInfo->evaluateVersionCondition('PHP', '>7.0')); + $this->assertTrue($mockVersionInfo->evaluateVersionCondition('PHP', '!=5.2')); + } +} \ No newline at end of file diff --git a/version_check.php b/version_check.php index 0f2e8bab7f..449750ad28 100644 --- a/version_check.php +++ b/version_check.php @@ -10,19 +10,30 @@ define('PMA_MINIMUM_COMMON', true); require_once 'libraries/common.inc.php'; require_once 'libraries/Util.class.php'; +require_once 'libraries/VersionInformation.php'; // Always send the correct headers header('Content-type: application/json; charset=UTF-8'); -$version = PMA_Util::getLatestVersion(); +$versionInformation = new VersionInformation(); +$versionDetails = $versionInformation->getLatestVersion(); -if (empty($version)) { +if (empty($versionDetails)) { echo json_encode(array()); } else { + $latestCompatible = $versionInformation->getLatestCompatibleVersion( + $versionDetails->releases + ); + $version = ''; + $date = ''; + if ($latestCompatible != null) { + $version = $latestCompatible['version']; + $date = $latestCompatible['date']; + } echo json_encode( array( - 'version' => (! empty($version->version) ? $version->version : ''), - 'date' => (! empty($version->date) ? $version->date : ''), + 'version' => (! empty($version) ? $version : ''), + 'date' => (! empty($date) ? $date : ''), ) ); } From 2b31866fe0b30b867aaf5b5fedb11adb354e037f Mon Sep 17 00:00:00 2001 From: Marc Delisle Date: Tue, 20 Oct 2015 10:02:54 -0400 Subject: [PATCH 02/79] [security] Content spoofing on url.php Signed-off-by: Marc Delisle --- url.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/url.php b/url.php index 82b224311b..44c140b68f 100644 --- a/url.php +++ b/url.php @@ -32,7 +32,8 @@ if (! PMA_isValid($_GET['url']) } "; // Display redirecting msg on screen. - printf(__('Taking you to %s.'), htmlspecialchars($_GET['url'])); + // Do not display the value of $_GET['url'] to avoid showing injected content + echo __('Taking you to the target site.'); } die(); ?> From 6be88fa2841865dd4d5bae6647646a987614c93b Mon Sep 17 00:00:00 2001 From: Marc Delisle Date: Fri, 23 Oct 2015 06:35:33 -0400 Subject: [PATCH 03/79] ChangeLog entry Signed-off-by: Marc Delisle --- ChangeLog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9afeb57a84..5f8dea123b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,9 @@ phpMyAdmin - ChangeLog ====================== -4.4.15.1 (not yet released) +4.4.15.1 (2015-10-23) - issue #11464 phpMyAdmin suggests upgrading to newer version not usable on that system +- issue [security] Content spoofing on url.php 4.4.15.0 (2015-09-20) - issue #11411 Undefined "replace" function on numeric scalar From fecf8b76ef831be0a5a8fddb1c3edf4251e92076 Mon Sep 17 00:00:00 2001 From: Marc Delisle Date: Fri, 23 Oct 2015 06:55:30 -0400 Subject: [PATCH 04/79] 4.4.15.1 release Signed-off-by: Marc Delisle --- README | 2 +- doc/conf.py | 2 +- libraries/Config.class.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README b/README index f939e7fbf3..1c3f3b2952 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ phpMyAdmin - Readme =================== -Version 4.4.15 +Version 4.4.15.1 A set of PHP-scripts to manage MySQL over the web. diff --git a/doc/conf.py b/doc/conf.py index 028a3ad4c6..53918f37ad 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -51,7 +51,7 @@ copyright = u'2012 - 2014, The phpMyAdmin devel team' # built documents. # # The short X.Y version. -version = '4.4.15' +version = '4.4.15.1' # The full version, including alpha/beta/rc tags. release = version diff --git a/libraries/Config.class.php b/libraries/Config.class.php index 790f54eb10..4fd14b4b46 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.4.15'); + $this->set('PMA_VERSION', '4.4.15.1'); /** * @deprecated */ From 583cb1ede5f8c81bf3f5cf90a8d1b9d8e62ae6ad Mon Sep 17 00:00:00 2001 From: Marc Delisle Date: Fri, 25 Dec 2015 15:42:36 -0500 Subject: [PATCH 05/79] [Security] Path disclosure, see PMASA-2015-6 Signed-off-by: Marc Delisle --- ChangeLog | 3 +++ libraries/config/messages.inc.php | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 5f8dea123b..4970317d93 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,9 @@ phpMyAdmin - ChangeLog ====================== +4.4.15.2 (2015-12-25) +- issue [Security] Path disclosure, see PMASA-2015-6 + 4.4.15.1 (2015-10-23) - issue #11464 phpMyAdmin suggests upgrading to newer version not usable on that system - issue [security] Content spoofing on url.php diff --git a/libraries/config/messages.inc.php b/libraries/config/messages.inc.php index e77e979a71..3ef1cadec6 100644 --- a/libraries/config/messages.inc.php +++ b/libraries/config/messages.inc.php @@ -11,7 +11,7 @@ */ if (!function_exists('__')) { - PMA_fatalError('Bad invocation!'); + exit(); } $strConfigAllowArbitraryServer_desc From daf86cd1e369f63ad132d8dc63a7217267030408 Mon Sep 17 00:00:00 2001 From: Marc Delisle Date: Fri, 25 Dec 2015 15:43:50 -0500 Subject: [PATCH 06/79] 4.4.15.2 release Signed-off-by: Marc Delisle --- README | 2 +- doc/conf.py | 2 +- libraries/Config.class.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README b/README index 1c3f3b2952..325fd7acca 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ phpMyAdmin - Readme =================== -Version 4.4.15.1 +Version 4.4.15.2 A set of PHP-scripts to manage MySQL over the web. diff --git a/doc/conf.py b/doc/conf.py index 53918f37ad..7e3a7c2d13 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -51,7 +51,7 @@ copyright = u'2012 - 2014, The phpMyAdmin devel team' # built documents. # # The short X.Y version. -version = '4.4.15.1' +version = '4.4.15.2' # The full version, including alpha/beta/rc tags. release = version diff --git a/libraries/Config.class.php b/libraries/Config.class.php index 4fd14b4b46..a17f88d0c0 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.4.15.1'); + $this->set('PMA_VERSION', '4.4.15.2'); /** * @deprecated */ From 0f7927e16f8750b747bc4e3985ef082bacba8aea Mon Sep 17 00:00:00 2001 From: Marc Delisle Date: Fri, 15 Jan 2016 16:52:26 -0500 Subject: [PATCH 07/79] 4.5.5-dev Signed-off-by: Marc Delisle --- ChangeLog | 2 ++ README | 2 +- doc/conf.py | 2 +- libraries/Config.class.php | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 69c85c0ff8..2ab46b6f42 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ phpMyAdmin - ChangeLog ====================== +4.5.5.0 (not yet released) + 4.5.4.0 (not yet released) - issue #11724 live data edit of big sets is not working - issue Table list not saved in db QBE bookmarked search diff --git a/README b/README index ff8ab7af92..93991384e0 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ phpMyAdmin - Readme =================== -Version 4.5.4-dev +Version 4.5.5-dev A set of PHP-scripts to manage MySQL over the web. diff --git a/doc/conf.py b/doc/conf.py index 133e310fd6..8232cd14e3 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -51,7 +51,7 @@ copyright = u'2012 - 2014, The phpMyAdmin devel team' # built documents. # # The short X.Y version. -version = '4.5.4-dev' +version = '4.5.5-dev' # The full version, including alpha/beta/rc tags. release = version diff --git a/libraries/Config.class.php b/libraries/Config.class.php index c811d7b21a..c3b220f9be 100644 --- a/libraries/Config.class.php +++ b/libraries/Config.class.php @@ -114,7 +114,7 @@ class PMA_Config */ public function checkSystem() { - $this->set('PMA_VERSION', '4.5.4-dev'); + $this->set('PMA_VERSION', '4.5.5-dev'); /** * @deprecated */ From a8d866a7469c2c95f51f54f58b1a8c70afec3b9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xos=C3=A9=20Calvo?= Date: Fri, 15 Jan 2016 19:50:49 +0100 Subject: [PATCH 08/79] Translated using Weblate (Galician) Currently translated at 86.2% (2769 of 3210 strings) [CI skip] --- po/gl.po | 114 ++++++++++++++++++++++++------------------------------- 1 file changed, 50 insertions(+), 64 deletions(-) diff --git a/po/gl.po b/po/gl.po index 5e357f12c6..b374ba65dc 100644 --- a/po/gl.po +++ b/po/gl.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-11 22:37+0000\n" +"PO-Revision-Date: 2016-01-15 19:50+0000\n" "Last-Translator: Xosé Calvo \n" -"Language-Team: Galician \n" +"Language-Team: Galician " +"\n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2595,6 +2595,12 @@ msgid "" "cause such a problem, clearing your \"Offline Website Data\" might help. In " "Safari, such problem is commonly caused by \"Private Mode Browsing\"." msgstr "" +"Produciuse un problema ao acceder ao almacenamento do seu navegador; " +"algunhas funcionalidades poderían non funcionar axeitadamente. É probábel " +"que o navegador non admita o almacenamento ou que se atinxise o límite de " +"cota. No Firefox o almacenamento estragado pode provocar problemas deste " +"tipo; limpar os «Datos de sitios web sen conexión» podería axudar. No Safari " +"este é un problema que causa frecuentemente a «Navegación en modo privado»." #: js/messages.php:635 msgctxt "Previous month" @@ -6438,7 +6444,7 @@ msgstr "" #: libraries/config/messages.inc.php:375 libraries/config/messages.inc.php:389 msgid "Update data when duplicate keys found on import" -msgstr "" +msgstr "Actualizar os datos ao atopar chaves duplicadas ao importar" #: libraries/config/messages.inc.php:379 msgid "" @@ -6812,7 +6818,7 @@ msgstr "Mostrar os procedementos nunha árbore" #: libraries/config/messages.inc.php:535 msgid "Whether to show procedures under database in the navigation tree" -msgstr "" +msgstr "Mostrar os procedementos baixo a base de datos na árbore de navegación" #: libraries/config/messages.inc.php:536 msgid "Show events in tree" @@ -6850,11 +6856,11 @@ msgstr "Onde mostrar as ligazóns das fileiras das táboas" #: libraries/config/messages.inc.php:548 msgid "Whether to show row links even in the absence of a unique key." -msgstr "" +msgstr "Mostrar as ligazóns das filas mesmo na ausencia de chaves únicas." #: libraries/config/messages.inc.php:550 msgid "Show row links anyway" -msgstr "" +msgstr "Mostrar as ligazóns das filas de calquera maneira" #: libraries/config/messages.inc.php:552 msgid "Use natural order for sorting table and database names." @@ -7002,7 +7008,7 @@ msgstr "Recordar a ordenación da táboa" #: libraries/config/messages.inc.php:607 msgid "Default sort order for tables with a primary key." -msgstr "" +msgstr "Orde predeterminada de ordenación das táboas con chave primaria." #: libraries/config/messages.inc.php:609 #, fuzzy @@ -7472,7 +7478,6 @@ msgid "Display columns table" msgstr "Mostrar a táboa de columnas" #: libraries/config/messages.inc.php:773 -#, fuzzy #| msgid "" #| "Leave blank for no \"persistent\" tables' UI preferences across sessions, " #| "suggested: [kbd]pma__table_uiprefs[/kbd]" @@ -7481,7 +7486,7 @@ msgid "" "suggested: [kbd]pma__table_uiprefs[/kbd]." msgstr "" "Déixeo en branco se non desexa preferencias «persistentes» da interface das " -"táboas entre sesións; suxírese: [kbd]pma__table_uiprefs[/kbd]" +"táboas entre sesións; suxírese: [kbd]pma__table_uiprefs[/kbd]." #: libraries/config/messages.inc.php:776 msgid "UI preferences table" @@ -7601,7 +7606,7 @@ msgstr "" #: libraries/config/messages.inc.php:827 msgid "Hidden navigation items table" -msgstr "" +msgstr "Táboa de elementos de navegación agochados" #: libraries/config/messages.inc.php:829 msgid "User for config auth" @@ -7945,7 +7950,7 @@ msgstr "" #: libraries/config/messages.inc.php:965 msgid "Proxy url" -msgstr "" +msgstr "URL do proxy" #: libraries/config/messages.inc.php:967 msgid "" @@ -8002,7 +8007,7 @@ msgstr "Chave privada do reCaptcha" #: libraries/config/messages.inc.php:991 msgid "Choose the default action when sending error reports." -msgstr "" +msgstr "Escolla a acción predeterminada para enviar informes de fallo." #: libraries/config/messages.inc.php:993 msgid "Send error reports" @@ -8013,12 +8018,13 @@ msgid "" "Queries are executed by pressing Enter (instead of Ctrl+Enter). New lines " "will be inserted with Shift+Enter." msgstr "" +"As consultas execútanse ao premer Intro (no canto de Ctrl+Intro). As liñas " +"novas insírense con Maiús+Intro." #: libraries/config/messages.inc.php:999 -#, fuzzy #| msgid "Executed queries" msgid "Enter executes queries in console" -msgstr "Consultas executadas" +msgstr "Intro executa consultas na consola" #: libraries/config/messages.inc.php:1002 msgid "" @@ -8105,14 +8111,14 @@ msgstr "Deixouse a vista %s" #: libraries/controllers/DatabaseStructureController.class.php:429 #: tbl_operations.php:398 -#, fuzzy, php-format +#, php-format #| msgid "Table %s has been dropped." msgid "Table %s has been dropped." -msgstr "Eliminouse a táboa %s" +msgstr "Eliminouse a táboa %s." #: libraries/controllers/DatabaseStructureController.class.php:738 msgid "Favorite List is full!" -msgstr "" +msgstr "A lista de favoritos está chea!" #: libraries/controllers/DatabaseStructureController.class.php:953 #: libraries/mysql_charsets.lib.php:369 libraries/mysql_charsets.lib.php:376 @@ -8165,18 +8171,17 @@ msgstr "Busca gráfica" #: libraries/controllers/TableSearchController.class.php:850 #: templates/table/search/selection_form.phtml:59 -#, fuzzy #| msgid "Find and Replace" msgid "Find and replace" -msgstr "Buscar e substituír" +msgstr "Atopar e substituír" #: libraries/controllers/TableStructureController.class.php:163 -#, fuzzy, php-format +#, php-format #| msgid "The column name '%s' is a MySQL reserved keyword." msgid "The name '%s' is a MySQL reserved keyword." msgid_plural "The names '%s' are MySQL reserved keywords." -msgstr[0] "O nome de columna «%s» é unha palabra chave reservada do MySQL." -msgstr[1] "O nome de columna «%s» é unha palabra chave reservada do MySQL." +msgstr[0] "O nome «%s» é unha palabra chave reservada do MySQL." +msgstr[1] "Os nomes «%s» son palabras chaves reservadas do MySQL." #: libraries/controllers/TableStructureController.class.php:241 msgid "No column selected." @@ -8187,11 +8192,11 @@ msgid "The columns have been moved successfully." msgstr "Movéronse as columnas satisfactoriamente." #: libraries/controllers/TableStructureController.class.php:741 -#, fuzzy, php-format +#, php-format #| msgid "Table %1$s has been altered successfully." msgid "" "Table %1$s has been altered successfully. Privileges have been adjusted." -msgstr "Alterouse a táboa %1$s sen problemas." +msgstr "Alterouse a táboa %1$s sen problemas. Axustáronse os privilexios." #: libraries/controllers/TableStructureController.class.php:796 #: libraries/tracking.lib.php:1094 @@ -8349,28 +8354,24 @@ msgid "Export templates:" msgstr "Tipo de exportación" #: libraries/display_export.lib.php:205 -#, fuzzy #| msgid "File name template:" msgid "New template:" -msgstr "Modelo do nome de ficheiro:" +msgstr "Modelo novo:" #: libraries/display_export.lib.php:208 -#, fuzzy #| msgid "Table name" msgid "Template name" -msgstr "Nome da táboa" +msgstr "Nome do modelo" #: libraries/display_export.lib.php:217 -#, fuzzy #| msgid "File name template:" msgid "Existing templates:" -msgstr "Modelo do nome de ficheiro:" +msgstr "Modelos existentes:" #: libraries/display_export.lib.php:218 -#, fuzzy #| msgid "Temp disk rate" msgid "Template:" -msgstr "Taxa de temporais no disco" +msgstr "Modelo:" #: libraries/display_export.lib.php:223 #, fuzzy @@ -8379,16 +8380,14 @@ msgid "Update" msgstr "Actualizada" #: libraries/display_export.lib.php:245 -#, fuzzy #| msgid "Select Tables" msgid "Select a template" -msgstr "Escoller táboas" +msgstr "Seleccionar un modelo" #: libraries/display_export.lib.php:291 -#, fuzzy #| msgid "Export method" msgid "Export method:" -msgstr "Método de exportación" +msgstr "Método de exportación:" #: libraries/display_export.lib.php:301 msgid "Quick - display only the minimal options" @@ -8399,17 +8398,15 @@ msgid "Custom - display all possible options" msgstr "Personalizada - mostrar todas as opcións posíbeis" #: libraries/display_export.lib.php:335 -#, fuzzy #| msgid "Databases" msgid "Databases:" -msgstr "Bases de datos" +msgstr "Bases de datos:" #: libraries/display_export.lib.php:337 #: libraries/navigation/Navigation.class.php:196 -#, fuzzy #| msgid "Tables" msgid "Tables:" -msgstr "Táboas" +msgstr "Táboas:" #: libraries/display_export.lib.php:357 libraries/display_import.lib.php:358 #: libraries/plugins/export/ExportCodegen.class.php:107 @@ -8511,20 +8508,18 @@ msgid "View output as text" msgstr "Ver a saída como texto" #: libraries/display_export.lib.php:751 -#, fuzzy #| msgid "Export views" msgid "Export databases as separate files" -msgstr "Exportar as vistas" +msgstr "Exportar as bases de datos como ficheiros separados" #: libraries/display_export.lib.php:753 -#, fuzzy #| msgid "Export table headers" msgid "Export tables as separate files" -msgstr "Exportar os cabezallos das táboas" +msgstr "Exportar as táboas como ficheiros separados" #: libraries/display_export.lib.php:783 libraries/display_export.lib.php:909 msgid "Rename exported databases/tables/columns" -msgstr "" +msgstr "Mudar o nome das bases de datos/táboas/columnas seleccionadas" #: libraries/display_export.lib.php:808 msgid "Save output to a file" @@ -8532,19 +8527,17 @@ msgstr "Gardar a saída nun ficheiro" #: libraries/display_export.lib.php:841 msgid "Skip tables larger than" -msgstr "" +msgstr "Omitir as táboas maiores de" #: libraries/display_export.lib.php:936 -#, fuzzy #| msgid "Select Tables" msgid "Select database" -msgstr "Escoller táboas" +msgstr "Seleccionar base de datos" #: libraries/display_export.lib.php:938 -#, fuzzy #| msgid "Select Tables" msgid "Select table" -msgstr "Escoller táboas" +msgstr "Seleccionar táboa" #: libraries/display_export.lib.php:954 #, fuzzy @@ -8553,16 +8546,14 @@ msgid "New database name" msgstr "nome da base de datos" #: libraries/display_export.lib.php:978 -#, fuzzy #| msgid "New table" msgid "New table name" -msgstr "Sen táboas" +msgstr "Nome novo da táboa" #: libraries/display_export.lib.php:988 -#, fuzzy #| msgid "Copy column name" msgid "Old column name" -msgstr "Copiar nome da columna" +msgstr "Nome anterior da táboa" #: libraries/display_export.lib.php:989 #, fuzzy @@ -8629,21 +8620,19 @@ msgstr "" "b>. Exemplo: .sql.zip" #: libraries/display_import.lib.php:224 -#, fuzzy #| msgid "File to Import:" msgid "File to import:" msgstr "Ficheiro que importar:" #: libraries/display_import.lib.php:234 libraries/display_import.lib.php:251 msgid "You may also drag and drop a file on any page." -msgstr "" +msgstr "Tamén pode arrastrar e soltar un ficheiro sobre calquera páxina." #: libraries/display_import.lib.php:254 msgid "File uploads are not allowed on this server." msgstr "Este servidor non admite a recepción de ficheiros." #: libraries/display_import.lib.php:278 -#, fuzzy #| msgid "Partial Import:" msgid "Partial import:" msgstr "Importación parcial:" @@ -8667,16 +8656,14 @@ msgstr "" "importar ficheiros longos, aínda que pode rachar transaccións.)" #: libraries/display_import.lib.php:309 -#, fuzzy #| msgid "Number of rows to skip, starting from the first row:" msgid "Skip this number of queries (for SQL) starting from the first one:" -msgstr "Número de filas que saltar, comezando na primeira:" +msgstr "Omitir este número de consultas (para SQL), comezando na primeira:" #: libraries/display_import.lib.php:339 -#, fuzzy #| msgid "Options" msgid "Other options:" -msgstr "Opcións" +msgstr "Outras opcións:" #: libraries/display_import.lib.php:477 msgid "" @@ -12392,7 +12379,7 @@ msgstr "Non hai acontecementos que mostrar." #: libraries/select_lang.lib.php:614 msgid "Ignoring unsupported language code." -msgstr "" +msgstr "Ignórase o código de idioma descoñecido." #: libraries/select_server.lib.php:43 libraries/select_server.lib.php:48 #, fuzzy @@ -12457,7 +12444,6 @@ msgstr "" #: libraries/server_databases.lib.php:366 #: libraries/server_databases.lib.php:371 -#, fuzzy #| msgid "Enable Statistics" msgid "Enable statistics" msgstr "Activar as estatísticas" From 732274b34c45a87e1c19fcf1b408e8ea64e71679 Mon Sep 17 00:00:00 2001 From: Burak Yavuz Date: Fri, 15 Jan 2016 14:15:22 +0100 Subject: [PATCH 09/79] Translated using Weblate (Turkish) Currently translated at 100.0% (3210 of 3210 strings) [CI skip] --- po/tr.po | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/po/tr.po b/po/tr.po index bead234383..766c6c38a5 100644 --- a/po/tr.po +++ b/po/tr.po @@ -4,8 +4,8 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-15 03:20+0000\n" -"Last-Translator: kenan akgün \n" +"PO-Revision-Date: 2016-01-15 14:15+0000\n" +"Last-Translator: Burak Yavuz \n" "Language-Team: Turkish " "\n" "Language: tr\n" @@ -2596,16 +2596,17 @@ msgid "" "cause such a problem, clearing your \"Offline Website Data\" might help. In " "Safari, such problem is commonly caused by \"Private Mode Browsing\"." msgstr "" -"Sorun tarayıcı depolama, bazı özellikler düzgün çalışmayabilir erişirken bir " -"hata oluştu. Tarayıcı depolama desteklemiyor olması muhtemeldir ya da kota " -"sınırı ulaşıldı. Firefox, bozuk depolama da böyle bir sorun, \"web Sitesi " -"Verilerini\" yardımcı olabilir. Çevrimdışı takas neden olabilir Safari, bu " -"sorun genellikle neden olur \"Özel Tarama Modu\"." +"Tarayıcınızın depolamasına erişirken bir sorun oldu, bazı özellikler düzgün " +"olarak çalışmayabilir. Büyük olasılıkla tarayıcı depolamayı desteklemiyor ya " +"da kota sınırına ulaşıldı. Firefox'ta, bozuk depolama böyle bir soruna neden " +"olabilir, \"Çevrimdışı Web Sitesi Verileri\"nizi temizlemeniz yardımcı " +"olabilir. Safari'de, genellikle böyle bir soruna \"Özel Kipte Tarama\" neden " +"olur." #: js/messages.php:635 msgctxt "Previous month" msgid "Prev" -msgstr "önceki" +msgstr "Önceki" #: js/messages.php:640 msgctxt "Next month" From 19085e7f77d38dedc45c8838d52c75bececf2cc6 Mon Sep 17 00:00:00 2001 From: Domen Date: Fri, 18 Dec 2015 16:43:51 +0100 Subject: [PATCH 10/79] Translated using Weblate (Slovenian) Currently translated at 100.0% (3210 of 3210 strings) [CI skip] --- po/sl.po | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/po/sl.po b/po/sl.po index 9fa92e1ae7..caa86c80ce 100644 --- a/po/sl.po +++ b/po/sl.po @@ -4,16 +4,16 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2015-12-18 16:43+0000\n" +"PO-Revision-Date: 2016-01-16 01:16+0000\n" "Last-Translator: Domen \n" -"Language-Team: Slovenian \n" +"Language-Team: Slovenian " +"\n" "Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" -"%100==4 ? 2 : 3;\n" +"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || " +"n%100==4 ? 2 : 3;\n" "X-Generator: Weblate 2.5-dev\n" #: changelog.php:37 license.php:30 @@ -2589,6 +2589,12 @@ msgid "" "cause such a problem, clearing your \"Offline Website Data\" might help. In " "Safari, such problem is commonly caused by \"Private Mode Browsing\"." msgstr "" +"Pri dostopanju do shrambe vašega brskalnika je prišlo do napake, zato " +"nekatere zmožnosti morda ne bodo delovale pravilno. Najverjetneje brskalnik " +"ne podpira shrambe ali pa je bila dosežena omejitev kvote. V Firefoxu lahko " +"tako težavo povzroči tudi pokvarjena shramba, pri čemer lahko pomaga " +"čiščenje vaših \"Podatkov pri delu brez povezave\". V Safariju je za težavo " +"pogosto krivo \"Brskanje v zasebnem načinu\"." #: js/messages.php:635 msgctxt "Previous month" From 7d4c570b76e6530086db6d307b7dd51249be5b8f Mon Sep 17 00:00:00 2001 From: Marc Delisle Date: Sat, 16 Jan 2016 08:27:11 -0500 Subject: [PATCH 11/79] Undefined index: is_ajax_request Signed-off-by: Marc Delisle --- ChangeLog | 1 + libraries/core.lib.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 2ab46b6f42..f3057ab388 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ phpMyAdmin - ChangeLog ====================== 4.5.5.0 (not yet released) +- issue Undefined index: is_ajax_request 4.5.4.0 (not yet released) - issue #11724 live data edit of big sets is not working diff --git a/libraries/core.lib.php b/libraries/core.lib.php index 3877548c34..30e402122e 100644 --- a/libraries/core.lib.php +++ b/libraries/core.lib.php @@ -220,7 +220,7 @@ function PMA_fatalError( $error_message = vsprintf($error_message, $message_args); } - if ($GLOBALS['is_ajax_request']) { + if (! empty($GLOBALS['is_ajax_request']) && $GLOBALS['is_ajax_request']) { $response = PMA_Response::getInstance(); $response->isSuccess(false); $response->addJSON('message', PMA_Message::error($error_message)); From 20a508358bd4102bad0ae53299b453e0f39ee5b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Sun, 17 Jan 2016 18:35:42 +0100 Subject: [PATCH 12/79] Fix comment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- user_password.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user_password.php b/user_password.php index 93149947bb..ddde5e9be0 100644 --- a/user_password.php +++ b/user_password.php @@ -210,7 +210,7 @@ function PMA_changePassHashingFunction() } /** - * Generate the error url and submit the query + * Changes password for a user * * @param string $username Username * @param string $hostname Hostname From bfaa77ef21ab04b63d165f78d84f6b8bb716c8d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Sun, 17 Jan 2016 18:43:32 +0100 Subject: [PATCH 13/79] Fix password change on MariaDB 10.1 and newer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use SET PASSWORD which seems again do the correct thing there. Fixes #11855 Signed-off-by: Michal Čihař --- ChangeLog | 1 + user_password.php | 1 + 2 files changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index f3057ab388..9419c1f3eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ phpMyAdmin - ChangeLog 4.5.5.0 (not yet released) - issue Undefined index: is_ajax_request +- issue #11855 Fix password change on MariaDB 10.1 and newer 4.5.4.0 (not yet released) - issue #11724 live data edit of big sets is not working diff --git a/user_password.php b/user_password.php index ddde5e9be0..30940f4cbf 100644 --- a/user_password.php +++ b/user_password.php @@ -235,6 +235,7 @@ function PMA_changePassUrlParamsAndSubmitQuery( : '\'' . PMA_Util::sqlAddSlashes($password) . '\''); } else if ($serverType == 'MariaDB' && PMA_MYSQL_INT_VERSION >= 50200 + && PMA_MYSQL_INT_VERSION < 100100 ) { if ($orig_auth_plugin == 'mysql_native_password') { // Set the hashing method used by PASSWORD() From 2d658ccad0f0247770229399aa887fef073b3a11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Sun, 17 Jan 2016 16:48:49 +0100 Subject: [PATCH 14/79] Translated using Weblate (Czech) Currently translated at 95.7% (3075 of 3210 strings) [CI skip] --- po/cs.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/cs.po b/po/cs.po index 28a1b3b85a..7fd7a27594 100644 --- a/po/cs.po +++ b/po/cs.po @@ -6,10 +6,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2015-11-12 10:29+0000\n" +"PO-Revision-Date: 2016-01-17 16:48+0000\n" "Last-Translator: Michal Čihař \n" -"Language-Team: Czech \n" +"Language-Team: Czech " +"\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -16240,7 +16240,7 @@ msgstr "" #: libraries/advisory_rules.txt:267 #, php-format msgid "Current values are tmp_table_size: %s, max_heap_table_size: %s" -msgstr "Současné hodnoty jous tmp_table_size: %s, max_heap_table_size: %s" +msgstr "Současné hodnoty jsou tmp_table_size: %s, max_heap_table_size: %s" #: libraries/advisory_rules.txt:269 msgid "Percentage of temp tables on disk" From b621d15adf5fcee3c3585b553b73a08c68be6572 Mon Sep 17 00:00:00 2001 From: Marc Delisle Date: Sun, 17 Jan 2016 13:37:19 +0100 Subject: [PATCH 15/79] Translated using Weblate (French) Currently translated at 100.0% (3210 of 3210 strings) [CI skip] --- po/fr.po | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/po/fr.po b/po/fr.po index 769eca4d2a..b80ee65ad8 100644 --- a/po/fr.po +++ b/po/fr.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin-docs 4.0.0-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-14 12:59+0000\n" +"PO-Revision-Date: 2016-01-17 13:37+0000\n" "Last-Translator: Marc Delisle \n" "Language-Team: French " "\n" @@ -16840,7 +16840,7 @@ msgstr "" msgid "" "Max_used_connections is at %s%% of max_connections, it should be below 80%%" msgstr "" -"Max_used_connections est à %s%% de max_connections, devrait être sous les " +"Max_used_connections est à %s%% de max_connections, il devrait être sous les " "80%%" #: libraries/advisory_rules.txt:399 @@ -16940,8 +16940,8 @@ msgid "" "The InnoDB log file size is not an appropriate size, in relation to the " "InnoDB buffer pool." msgstr "" -"La taille du journal InnoDB n'est pas appropriée, en tenant compte du pool " -"de mémoire tampon InnoDB." +"La taille du journal InnoDB n'est pas appropriée, par rapport au pool de " +"mémoire tampon InnoDB." #: libraries/advisory_rules.txt:440 #, php-format @@ -16956,16 +16956,16 @@ msgid "" "fine. See also this blog entry" msgstr "" -"Surtout si votre système effectue de nombreuses écritures dans des tables " -"InnoDB, vous devriez régler innodb_log_file à 25%% de " +"En particulier si votre système effectue de nombreuses écritures dans des " +"tables InnoDB, vous devriez régler innodb_log_file à 25%% de " "{innodb_buffer_pool_size}. Cependant, plus cette valeur est élevée, plus " "long sera le temps de recouvrement en cas de panne de la base de données, " "alors cette valeur ne devrait pas dépasser 256 Mio. Veuillez noter que vous " "ne pouvez pas simplement changer la valeur de cette variable. Il vous faut " "fermer le serveur, enlever les journaux InnoDB, placer la nouvelle valeur " "dans my.cnf, démarrer le serveur, puis vérifier les journaux d'erreurs. Voir " -"aussi cet article de blogue." +"aussi cet article de blogue." #: libraries/advisory_rules.txt:441 #, php-format @@ -16973,8 +16973,8 @@ msgid "" "Your InnoDB log size is at %s%% in relation to the InnoDB buffer pool size, " "it should not be below 20%%" msgstr "" -"La taille de votre journal InnoDB est de %s%% en comparant au pool de " -"mémoire tampon InnoDB, elle ne devrait pas être sous les 20%%" +"La taille de votre journal InnoDB est de %s%% par rapport au pool de mémoire " +"tampon InnoDB, elle ne devrait pas être sous les 20%%" #: libraries/advisory_rules.txt:443 msgid "Max InnoDB log size" @@ -17018,7 +17018,7 @@ msgstr "Taille de la mémoire-tampon InnoDB" #: libraries/advisory_rules.txt:453 msgid "Your InnoDB buffer pool is fairly small." -msgstr "Votre mémoire-tampon InnoDB est petite." +msgstr "Votre mémoire-tampon InnoDB est trop petite." #: libraries/advisory_rules.txt:454 #, php-format From 8d006f1a238e9f9f9479ba29112e2afcd9a3c967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xos=C3=A9=20Calvo?= Date: Sun, 17 Jan 2016 22:02:09 +0100 Subject: [PATCH 16/79] Translated using Weblate (Galician) Currently translated at 86.2% (2770 of 3210 strings) [CI skip] --- po/gl.po | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/po/gl.po b/po/gl.po index b374ba65dc..fa6f7b571f 100644 --- a/po/gl.po +++ b/po/gl.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-15 19:50+0000\n" +"PO-Revision-Date: 2016-01-17 22:02+0000\n" "Last-Translator: Xosé Calvo \n" "Language-Team: Galician " "\n" @@ -9100,10 +9100,9 @@ msgid "" msgstr "As estruturas seguintes foron creadas ou alteradas. Aquí pode:" #: libraries/import.lib.php:1258 -#, fuzzy #| msgid "View a structure's contents by clicking on its name" msgid "View a structure's contents by clicking on its name." -msgstr "Ver o contido dunha estrutura premendo o seu nome" +msgstr "Ver o contido dunha estrutura premendo no seu nome." #: libraries/import.lib.php:1261 #, fuzzy From 0ef9cfc3001c3f2974249079a4ae3c32d8fc57a3 Mon Sep 17 00:00:00 2001 From: BlackyPanther Date: Mon, 18 Jan 2016 18:42:52 +0100 Subject: [PATCH 17/79] Translated using Weblate (German) Currently translated at 100.0% (3210 of 3210 strings) [CI skip] --- po/de.po | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/po/de.po b/po/de.po index 4f47264c0a..4be9326ff1 100644 --- a/po/de.po +++ b/po/de.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin-docs 4.0.0-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2015-12-17 13:57+0000\n" -"Last-Translator: Anna Henningsen \n" -"Language-Team: German \n" +"PO-Revision-Date: 2016-01-18 18:42+0000\n" +"Last-Translator: BlackyPanther \n" +"Language-Team: German " +"\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2629,6 +2629,13 @@ msgid "" "cause such a problem, clearing your \"Offline Website Data\" might help. In " "Safari, such problem is commonly caused by \"Private Mode Browsing\"." msgstr "" +"Es gab ein Problem beim Zugriff auf den lokalen Browserspeicher, weshalb " +"manche Eigenschaften möglicherweise nicht funktionieren. Dies tritt meistens " +"auf, wenn der Browser lokale Datenbanken nicht unterstützt oder das Quota-" +"Limit erreicht wurde. Im Firefox kann auch ein beschädigter Speicher solche " +"Probleme verursachen. Eventuell hilft es die \"Offline Webseiten Daten\" zu " +"löschen. In Safari entstehen solche Probleme meistens, wenn das \"Private " +"Surfen\" aktiviert ist." #: js/messages.php:635 msgctxt "Previous month" From 91bfa27ee2ba3816812f87436c5059fc512d5984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Tue, 19 Jan 2016 17:38:20 +0100 Subject: [PATCH 18/79] Do not cache data if releases attribute is missing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue #11874 Signed-off-by: Michal Čihař --- libraries/VersionInformation.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/VersionInformation.php b/libraries/VersionInformation.php index 555ddded89..e889b9c683 100644 --- a/libraries/VersionInformation.php +++ b/libraries/VersionInformation.php @@ -90,6 +90,7 @@ class VersionInformation $data = json_decode($response); if (is_object($data) && ! empty($data->version) + && ! empty($data->releases) && ! empty($data->date) && $save ) { @@ -267,4 +268,4 @@ class VersionInformation return PMA_Util::cacheGet('PMA_MYSQL_STR_VERSION'); } } -?> \ No newline at end of file +?> From 1a046d4d3ad6dda38530cdb04a2cb41d6f643db8 Mon Sep 17 00:00:00 2001 From: Marc Delisle Date: Tue, 19 Jan 2016 13:42:40 +0100 Subject: [PATCH 19/79] Translated using Weblate (French) Currently translated at 100.0% (3210 of 3210 strings) [CI skip] --- po/fr.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/fr.po b/po/fr.po index b80ee65ad8..77d238b0de 100644 --- a/po/fr.po +++ b/po/fr.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin-docs 4.0.0-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-17 13:37+0000\n" +"PO-Revision-Date: 2016-01-19 13:42+0000\n" "Last-Translator: Marc Delisle \n" "Language-Team: French " "\n" @@ -5587,7 +5587,7 @@ msgstr "Secret Blowfish" #: libraries/config/messages.inc.php:40 msgid "Highlight selected rows." -msgstr "Utilisé quand on clique sur une ligne." +msgstr "Mettre en surbrillance les lignes sélectionnées." #: libraries/config/messages.inc.php:41 msgid "Row marker" @@ -5619,7 +5619,7 @@ msgid "" "columns; [kbd]input[/kbd] - allows limiting of input length, [kbd]textarea[/" "kbd] - allows newlines in columns." msgstr "" -"Déterminer la méthode d'édition pour les colonnes CHAR et VARCHAR; " +"Détermine la méthode d'édition pour les colonnes CHAR et VARCHAR; " "[kbd]input[/kbd] - permet de limiter la taille, [kbd]textarea[/kbd] - permet " "la saisie de sauts de lignes." From 3bd0971db7da6d5f8f7127562261302ce16b6d16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 22 Jan 2016 09:42:54 +0100 Subject: [PATCH 20/79] Validate version information before further processing it Do basic sanity checking before we return the value further. This can especially happen in case the curl/allow_url_fopen is missing. Fixes #11874 --- ChangeLog | 1 + libraries/VersionInformation.php | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index a827292689..743183a2f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ phpMyAdmin - ChangeLog 4.5.5.0 (not yet released) - issue Undefined index: is_ajax_request - issue #11855 Fix password change on MariaDB 10.1 and newer +- issue #11874 Validate version information before further processing it 4.5.4.0 (not yet released) - issue #11724 live data edit of big sets is not working diff --git a/libraries/VersionInformation.php b/libraries/VersionInformation.php index e889b9c683..3821c7c834 100644 --- a/libraries/VersionInformation.php +++ b/libraries/VersionInformation.php @@ -87,13 +87,19 @@ class VersionInformation } } + /* Parse response */ $data = json_decode($response); - if (is_object($data) - && ! empty($data->version) - && ! empty($data->releases) - && ! empty($data->date) - && $save + + /* Basic sanity checking */ + if (! is_object($data) + || empty($data->version) + || empty($data->releases) + || empty($data->date) ) { + return null; + } + + if ($save) { if (! isset($_SESSION) && ! defined('TESTSUITE')) { ini_set('session.use_only_cookies', 'false'); ini_set('session.use_cookies', 'false'); From 38e511dc4782e2cc420be9a6a99857a945bb8d9f Mon Sep 17 00:00:00 2001 From: Martin Lacina Date: Tue, 19 Jan 2016 21:35:14 +0100 Subject: [PATCH 21/79] Translated using Weblate (Slovak) Currently translated at 84.1% (2701 of 3210 strings) [CI skip] --- po/sk.po | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/po/sk.po b/po/sk.po index 009c14df80..89a7446150 100644 --- a/po/sk.po +++ b/po/sk.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-10 22:29+0000\n" +"PO-Revision-Date: 2016-01-19 21:35+0000\n" "Last-Translator: Martin Lacina \n" -"Language-Team: Slovak \n" +"Language-Team: Slovak " +"\n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -10971,10 +10971,9 @@ msgid "Managing Central list of columns" msgstr "" #: libraries/relation.lib.php:332 -#, fuzzy #| msgid "Remember table's sorting" msgid "Remembering Designer Settings" -msgstr "Pamätať si triedenie tabuľky" +msgstr "Pamätať si nastavenia Dizajnéra" #: libraries/relation.lib.php:343 msgid "Saving export templates" @@ -13619,10 +13618,9 @@ msgid "The new name of the table was expected." msgstr "Bolo očakávané nové meno tabuľky." #: libraries/sql-parser/src/Components/RenameOperation.php:148 -#, fuzzy #| msgid "The row has been deleted." msgid "A rename operation was expected." -msgstr "Riadok bol zmazaný." +msgstr "Očakávala sa operácia premenovania." #: libraries/sql-parser/src/Lexer.php:267 msgid "Unexpected character." @@ -13644,10 +13642,9 @@ msgid "Ending quote %1$s was expected." msgstr "Udalosť %1$s bola vytvorená." #: libraries/sql-parser/src/Lexer.php:824 -#, fuzzy #| msgid "Table name template" msgid "Variable name was expected." -msgstr "Vzor pre názov tabuľky" +msgstr "Očakávalo sa meno premennej." #: libraries/sql-parser/src/Parser.php:417 msgid "Unexpected beginning of statement." @@ -13687,10 +13684,9 @@ msgid "The name of the entity was expected." msgstr "Počet práve otvorených tabuliek." #: libraries/sql-parser/src/Statements/CreateStatement.php:370 -#, fuzzy #| msgid "The row has been deleted." msgid "At least one column definition was expected." -msgstr "Riadok bol zmazaný." +msgstr "Očakávala sa aspoň jedna definícia stĺpca." #: libraries/sql-parser/src/Statements/CreateStatement.php:481 msgid "A \"RETURNS\" keyword was expected." @@ -14184,10 +14180,11 @@ msgid "Not enough privilege to view status variables." msgstr "" #: server_variables.php:83 -#, fuzzy, php-format +#, php-format #| msgid "Server variables and settings" msgid "Not enough privilege to view server variables and settings. %s" -msgstr "Premenné a nastavenia serveru" +msgstr "" +"Nedostatočné oprávnenia na zobrazenie premenných a nastavení servera. %s" #: setup/frames/config.inc.php:41 setup/frames/index.inc.php:278 msgid "Download" @@ -14545,10 +14542,9 @@ msgid "Operator" msgstr "Operátor" #: templates/database/designer/database_tables.phtml:29 -#, fuzzy #| msgid "Move columns" msgid "Show/hide columns" -msgstr "Presunúť stĺpce" +msgstr "Zobraziť/skryť stĺpce" #: templates/database/designer/database_tables.phtml:40 msgid "See table structure" @@ -15153,10 +15149,9 @@ msgstr "na začiatku tabuľky" #: templates/table/structure/display_partitions.phtml:3 #: templates/table/structure/display_structure.phtml:195 -#, fuzzy #| msgid "Position" msgid "Partitions" -msgstr "Pozícia" +msgstr "Oddiely" #: templates/table/structure/display_partitions.phtml:7 msgid "Partitioned by:" From 3307d1b5f771e7ea7812ad615ff1d99e93c0dd84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 22 Jan 2016 10:12:49 +0100 Subject: [PATCH 22/79] Translated using Weblate (Vietnamese) Currently translated at 85.9% (2759 of 3210 strings) [CI skip] --- po/vi.po | 90 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/po/vi.po b/po/vi.po index 15637a7e7e..880cdb9b71 100644 --- a/po/vi.po +++ b/po/vi.po @@ -8,10 +8,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-13 15:59+0000\n" +"PO-Revision-Date: 2016-01-22 10:12+0000\n" "Last-Translator: Michal Čihař \n" -"Language-Team: Vietnamese \n" +"Language-Team: Vietnamese " +"\n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,7 +30,7 @@ msgstr "" #: db_central_columns.php:105 msgid "The central list of columns for the current database is empty." -msgstr "Danh sách các cột trong CSDL hiện thời trống." +msgstr "Danh sách các cột trong Cơ sở dữ liệu hiện tại trống." #: db_central_columns.php:130 msgid "Click to sort." @@ -39,22 +39,22 @@ msgstr "Nhấn vào để sắp xếp." #: db_central_columns.php:149 #, php-format msgid "Showing rows %1$s - %2$s." -msgstr "Hiển thị các bản ghi từ %1$s tới %2$s." +msgstr "Hiển thị các hàng %1$s - %2$s." #: db_create.php:61 #, php-format msgid "Database %1$s has been created." -msgstr "Database %1$s đã được tạo." +msgstr "Cơ sở dữ liệu %1$s đã được tạo ra." #: db_datadict.php:58 libraries/operations.lib.php:33 msgid "Database comment" -msgstr "Chú thích của Database" +msgstr "Chú thích của cơ sở dữ liệu" #: db_datadict.php:105 #: libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php:966 #: templates/columns_definitions/column_definitions_form.phtml:79 msgid "Table comments:" -msgstr "Các chú thích của Bảng:" +msgstr "Chú thích của bảng:" #: db_datadict.php:114 libraries/Index.class.php:699 #: libraries/insert_edit.lib.php:1565 @@ -80,7 +80,7 @@ msgstr "Các chú thích của Bảng:" #: templates/table/search/table_header.phtml:6 #: templates/table/search/zoom_result_form.phtml:33 msgid "Column" -msgstr "Trường" +msgstr "Cột" #: db_datadict.php:115 libraries/Index.class.php:696 #: libraries/central_columns.lib.php:697 libraries/central_columns.lib.php:1383 @@ -168,7 +168,7 @@ msgstr "Liên kết tới" #: libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php:1029 #: templates/columns_definitions/table_fields_definitions.phtml:65 msgid "Comments" -msgstr "Chú thích" +msgstr "Ghi chú" #: db_datadict.php:156 #: libraries/controllers/TableStructureController.class.php:968 @@ -178,7 +178,7 @@ msgstr "Chú thích" #: templates/table/structure/check_all_table_column.phtml:22 #: templates/table/structure/display_structure.phtml:75 msgid "Primary" -msgstr "Khóa Chính" +msgstr "Chính" #: db_datadict.php:166 js/messages.php:318 libraries/Index.class.php:567 #: libraries/Index.class.php:606 libraries/Index.class.php:1021 @@ -238,14 +238,14 @@ msgstr "Có" #: db_export.php:44 msgid "View dump (schema) of database" -msgstr "Xem cấu trúc (lược đồ) của CSDL" +msgstr "Xem phần đổ (lược đồ) của cơ sở dữ liệu" #: db_export.php:48 db_tracking.php:101 export.php:381 #: libraries/DBQbe.class.php:326 #: libraries/controllers/DatabaseStructureController.class.php:180 #: libraries/navigation/NavigationTree.class.php:898 msgid "No tables found in database." -msgstr "Không có bảng nào trong CSDL." +msgstr "Không tìm thấy bảng nào trong cơ sở dữ liệu" #: db_export.php:62 libraries/ServerStatusData.class.php:129 #: libraries/build_html_for_db.lib.php:28 libraries/config/messages.inc.php:276 @@ -254,7 +254,7 @@ msgstr "Không có bảng nào trong CSDL." #: libraries/plugins/export/ExportXml.class.php:120 #: templates/database/structure/show_create.phtml:19 msgid "Tables" -msgstr "Bảng" +msgstr "Các bảng" #: db_export.php:63 libraries/Menu.class.php:320 libraries/Menu.class.php:428 #: libraries/Util.class.php:3350 libraries/Util.class.php:3360 @@ -296,17 +296,17 @@ msgstr "Chọn tất cả" #: db_operations.php:53 tbl_create.php:24 msgid "The database name is empty!" -msgstr "Tên cơ sở dữ liệu trống!" +msgstr "Tên cơ sở dữ liệu bị trống!" #: db_operations.php:141 #, php-format msgid "Database %1$s has been renamed to %2$s." -msgstr "CSDL %1$s đã được đổi tên thành %2$s." +msgstr "Cơ sở dữ liệu %1$s đã được đổi tên thành %2$s." #: db_operations.php:153 #, php-format msgid "Database %1$s has been copied to %2$s." -msgstr "CSDL %1$s đã được sao chép sang %2$s." +msgstr "Cơ sở dữ liệu %1$s đã được sao chép sang %2$s." #: db_operations.php:283 #, php-format @@ -316,23 +316,23 @@ msgstr "Cấu hình phpMyAdmin đã bị vô hiệu hóa. %sTìm hiểu lý do%s #: db_qbe.php:129 msgid "You have to choose at least one column to display!" -msgstr "Bạn phải chọn ít nhất 1 trường để hiển thị!" +msgstr "Bạn cần phải chỉ ra ít một cột cần hiển thị!" #: db_qbe.php:146 #, php-format msgid "Switch to %svisual builder%s" -msgstr "Chuyển sang chế độ %svisual builder%s" +msgstr "Chuyển sang %sbộ xây dựng trực quan%s" #: db_search.php:30 libraries/plugins/AuthenticationPlugin.class.php:70 #: libraries/plugins/auth/AuthenticationConfig.class.php:103 #: libraries/plugins/auth/AuthenticationConfig.class.php:118 #: libraries/plugins/auth/AuthenticationHttp.class.php:91 msgid "Access denied!" -msgstr "Truy cập bị từ chối!" +msgstr "Không đủ thẩm quyền!" #: db_tracking.php:51 db_tracking.php:76 msgid "Tracking data deleted successfully." -msgstr "Các dữ liệu theo dõi đã được xoá." +msgstr "Các dữ liệu theo dõi đã được xóa thành công." #: db_tracking.php:60 #, php-format @@ -346,7 +346,7 @@ msgstr "Chưa có bảng nào được chọn." #: db_tracking.php:145 msgid "Database Log" -msgstr "Database Log" +msgstr "Nhật ký Cơ sở dữ liệu" #: error_report.php:68 msgid "" @@ -376,19 +376,19 @@ msgstr "" #: error_report.php:85 msgid "You may want to refresh the page." -msgstr "Bạn cần làm mới lại trang." +msgstr "Bạn có lẽ nên làm tươi trang này lại." #: export.php:188 schema_export.php:61 msgid "Bad type!" -msgstr "Kiểu dữ liệu không phù hợp!" +msgstr "Sai kiểu!" #: export.php:275 msgid "Bad parameters!" -msgstr "Tham số không đúng!" +msgstr "Tham số sai!" #: file_echo.php:22 msgid "Invalid export type" -msgstr "Sai kiểu tập tin xuất" +msgstr "Kiểu xuất ra không hợp lệ" #: gis_data_editor.php:118 #, php-format @@ -412,7 +412,7 @@ msgstr "Hình dạng %d:" #: gis_data_editor.php:213 msgid "Point:" -msgstr "Điểm:" +msgstr "Tọa độ:" #: gis_data_editor.php:214 gis_data_editor.php:241 gis_data_editor.php:297 #: gis_data_editor.php:370 js/messages.php:434 @@ -1498,7 +1498,7 @@ msgstr "Xuất vùng chọn:" #: libraries/server_status_processes.lib.php:92 libraries/tracking.lib.php:279 #: libraries/tracking.lib.php:1620 msgid "Status" -msgstr "Trạng thái" +msgstr "Tình trạng" #: js/messages.php:245 js/messages.php:762 #: libraries/plugins/export/ExportHtmlword.class.php:472 @@ -2793,7 +2793,7 @@ msgstr "calendar-month-year" #: js/messages.php:751 msgctxt "Year suffix" msgid "none" -msgstr "none" +msgstr "Không" #: js/messages.php:763 msgid "Hour" @@ -2995,7 +2995,7 @@ msgstr "Truy vấn lại" #: templates/table/relation/foreign_key_row.phtml:165 #: templates/table/relation/internal_relational_row.phtml:55 msgid "Database" -msgstr "CSDL" +msgstr "Cơ sở dữ liệu" #: libraries/Console.class.php:100 #, php-format @@ -4736,7 +4736,7 @@ msgstr "Dùng giá trị này" #: templates/table/structure/display_partitions.phtml:24 #: templates/table/structure/row_stats_table.phtml:42 msgid "Rows" -msgstr "Bản ghi" +msgstr "Hàng" #: libraries/build_html_for_db.lib.php:48 libraries/engines/innodb.lib.php:180 #: libraries/server_databases.lib.php:173 libraries/server_status.lib.php:195 @@ -9017,7 +9017,7 @@ msgstr "Trình bày:" #: libraries/navigation/Navigation.class.php:219 libraries/tracking.lib.php:281 #: libraries/tracking.lib.php:1622 tbl_change.php:160 msgid "Show" -msgstr "Hiển thị" +msgstr "Hiện" #: libraries/navigation/NavigationHeader.class.php:162 msgid "Home" @@ -10167,22 +10167,22 @@ msgstr "" #: libraries/plugins/export/ExportSql.class.php:1395 #: libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php:973 msgid "Creation:" -msgstr "Khởi tạo:" +msgstr "Tạo:" #: libraries/plugins/export/ExportSql.class.php:1408 #: libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php:980 msgid "Last update:" -msgstr "Lần sửa đối cuối:" +msgstr "Cập nhật lần cuối:" #: libraries/plugins/export/ExportSql.class.php:1421 #: libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php:987 msgid "Last check:" -msgstr "Lần cuối kiểm tra:" +msgstr "Lần kiểm tra cuối:" #: libraries/plugins/export/ExportSql.class.php:1471 #: templates/database/structure/structure_table_row.phtml:183 msgid "in use" -msgstr "Thông dụng" +msgstr "đang dùng" #: libraries/plugins/export/ExportSql.class.php:1516 msgid "It appears your database uses views;" @@ -13530,11 +13530,11 @@ msgstr "Ngưng hoạt động ngay" #: libraries/tracking.lib.php:277 libraries/tracking.lib.php:1618 msgid "Created" -msgstr "Đã tạo" +msgstr "Đã được tạo" #: libraries/tracking.lib.php:278 libraries/tracking.lib.php:1619 msgid "Updated" -msgstr "Đã cập nhật" +msgstr "Đã được cập nhật" #: libraries/tracking.lib.php:288 libraries/tracking.lib.php:351 msgid "Delete version" @@ -13548,17 +13548,17 @@ msgstr "Báo cáo theo dõi" #: libraries/tracking.lib.php:290 libraries/tracking.lib.php:827 #: libraries/tracking.lib.php:1633 msgid "Structure snapshot" -msgstr "Cấu trúc ảnh chụp" +msgstr "Chụp cấu trúc" #: libraries/tracking.lib.php:417 libraries/tracking.lib.php:1443 #: libraries/tracking.lib.php:1730 msgid "active" -msgstr "Kích hoạt" +msgstr "tích cực" #: libraries/tracking.lib.php:419 libraries/tracking.lib.php:1445 #: libraries/tracking.lib.php:1725 msgid "not active" -msgstr "Chưa kích hoạt" +msgstr "không hoạt động" #: libraries/tracking.lib.php:461 msgid "Tracking statements" @@ -13677,20 +13677,20 @@ msgstr "Phiên bản %1$s đã được tạo, việc theo dõi %2$s đang hoạ #: libraries/tracking.lib.php:1464 msgid "Untracked tables" -msgstr "Những bảng chưa theo dõi" +msgstr "Các bảng chưa được theo dõi" #: libraries/tracking.lib.php:1493 libraries/tracking.lib.php:1517 #: templates/table/structure/optional_action_links.phtml:18 msgid "Track table" -msgstr "Theo dõi bảng" +msgstr "Bảng theo dõi" #: libraries/tracking.lib.php:1605 msgid "Tracked tables" -msgstr "Các bảng đã theo dõi" +msgstr "Các bảng được theo dõi" #: libraries/tracking.lib.php:1617 msgid "Last version" -msgstr " " +msgstr "Phiên bản cuối" #: libraries/tracking.lib.php:1630 libraries/tracking.lib.php:1704 msgid "Delete tracking" From 0a7fc9770e4f8a359db1881232dff11f4d4568a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 22 Jan 2016 10:17:29 +0100 Subject: [PATCH 23/79] Remove trailing space from a string MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- libraries/relation.lib.php | 3 ++- po/af.po | 2 +- po/ar.po | 2 +- po/az.po | 2 +- po/be.po | 2 +- po/be@latin.po | 2 +- po/bg.po | 2 +- po/bn.po | 2 +- po/br.po | 2 +- po/bs.po | 2 +- po/ca.po | 2 +- po/ckb.po | 2 +- po/cs.po | 2 +- po/cy.po | 2 +- po/da.po | 2 +- po/de.po | 2 +- po/el.po | 2 +- po/en_GB.po | 2 +- po/eo.po | 2 +- po/es.po | 2 +- po/et.po | 2 +- po/eu.po | 2 +- po/fa.po | 2 +- po/fi.po | 2 +- po/fr.po | 2 +- po/fy.po | 2 +- po/gl.po | 2 +- po/he.po | 2 +- po/hi.po | 2 +- po/hr.po | 2 +- po/hu.po | 2 +- po/hy.po | 2 +- po/ia.po | 2 +- po/id.po | 2 +- po/it.po | 2 +- po/ja.po | 2 +- po/ka.po | 2 +- po/kk.po | 2 +- po/km.po | 2 +- po/kn.po | 2 +- po/ko.po | 2 +- po/ksh.po | 2 +- po/ky.po | 2 +- po/li.po | 2 +- po/lt.po | 2 +- po/lv.po | 2 +- po/mk.po | 2 +- po/ml.po | 2 +- po/mn.po | 2 +- po/ms.po | 2 +- po/nb.po | 2 +- po/ne.po | 2 +- po/nl.po | 2 +- po/pa.po | 2 +- po/pl.po | 2 +- po/pt.po | 2 +- po/pt_BR.po | 2 +- po/ro.po | 2 +- po/ru.po | 2 +- po/si.po | 2 +- po/sk.po | 2 +- po/sl.po | 2 +- po/sq.po | 2 +- po/sr.po | 2 +- po/sr@latin.po | 2 +- po/sv.po | 2 +- po/ta.po | 2 +- po/te.po | 2 +- po/th.po | 2 +- po/tk.po | 2 +- po/tr.po | 2 +- po/tt.po | 2 +- po/ug.po | 2 +- po/uk.po | 2 +- po/ur.po | 2 +- po/uz.po | 2 +- po/uz@latin.po | 2 +- po/vi.po | 2 +- po/vls.po | 2 +- po/zh_CN.po | 2 +- po/zh_TW.po | 2 +- 81 files changed, 82 insertions(+), 81 deletions(-) diff --git a/libraries/relation.lib.php b/libraries/relation.lib.php index 6574b77c7b..802571e6de 100644 --- a/libraries/relation.lib.php +++ b/libraries/relation.lib.php @@ -97,7 +97,8 @@ function PMA_getRelationsParamDiagnostic($cfgRelation) $messages['disabled'] = '' . __('Disabled') . ''; if (empty($cfgRelation['db'])) { - $retval .= __('Configuration of pmadb… ') + $retval .= __('Configuration of pmadb…') + . ' ' . $messages['error'] . PMA_Util::showDocu('setup', 'linked-tables') . '
' . "\n" diff --git a/po/af.po b/po/af.po index 4490c55b05..b4044a9095 100644 --- a/po/af.po +++ b/po/af.po @@ -11360,7 +11360,7 @@ msgstr "Beskikbaar" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Veranderinge is gestoor" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ar.po b/po/ar.po index ddc4bcb373..ba0f1d7e49 100644 --- a/po/ar.po +++ b/po/ar.po @@ -11605,7 +11605,7 @@ msgstr "مفعل" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "تمت التعديلات" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/az.po b/po/az.po index 2b39ad6af0..af5165a41a 100644 --- a/po/az.po +++ b/po/az.po @@ -10945,7 +10945,7 @@ msgstr "" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfiqurasiya yaddaşa verildi." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/be.po b/po/be.po index 4350e51a05..3eaaaa3ff4 100644 --- a/po/be.po +++ b/po/be.po @@ -11917,7 +11917,7 @@ msgstr "Уключана" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Мадыфікацыі былі захаваныя" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/be@latin.po b/po/be@latin.po index 1cbfbe8f1b..840fb6bb8f 100644 --- a/po/be@latin.po +++ b/po/be@latin.po @@ -11986,7 +11986,7 @@ msgstr "Uklučana" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Madyfikacyi byli zachavanyja" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/bg.po b/po/bg.po index 75fb6acbb8..14dd9e3e44 100644 --- a/po/bg.po +++ b/po/bg.po @@ -11570,7 +11570,7 @@ msgstr "Позволено" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Конфигурацията запазена." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/bn.po b/po/bn.po index 0c379d8ecb..1d236ebb89 100644 --- a/po/bn.po +++ b/po/bn.po @@ -11598,7 +11598,7 @@ msgstr "কার্যকর" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "কনফিগারেশন সংরক্ষন করা হয়েছে।" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/br.po b/po/br.po index 6c2ff6ed16..762dbaf562 100644 --- a/po/br.po +++ b/po/br.po @@ -11574,7 +11574,7 @@ msgstr "" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration file" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Restr gefluniañ" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/bs.po b/po/bs.po index 4d659c5059..738db9cee4 100644 --- a/po/bs.po +++ b/po/bs.po @@ -11560,7 +11560,7 @@ msgstr "Omogućeno" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Izmjene su sačuvane" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ca.po b/po/ca.po index 63419151eb..ccb1e87073 100644 --- a/po/ca.po +++ b/po/ca.po @@ -11194,7 +11194,7 @@ msgid "Enabled" msgstr "Activat" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuració de pmadb... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ckb.po b/po/ckb.po index 77f5226454..3007f49e92 100644 --- a/po/ckb.po +++ b/po/ckb.po @@ -11012,7 +11012,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/cs.po b/po/cs.po index 7fd7a27594..ea3550cd8d 100644 --- a/po/cs.po +++ b/po/cs.po @@ -11062,7 +11062,7 @@ msgid "Enabled" msgstr "Zapnuto" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigurace pmadb... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/cy.po b/po/cy.po index 9a2255be28..a5e09b0ecb 100644 --- a/po/cy.po +++ b/po/cy.po @@ -11669,7 +11669,7 @@ msgstr "" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Cafodd yr addasiadau eu cadw" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/da.po b/po/da.po index 374b4bb633..5d3e2df3c1 100644 --- a/po/da.po +++ b/po/da.po @@ -11262,7 +11262,7 @@ msgid "Enabled" msgstr "Slået til" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfiguration af pmadb … " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/de.po b/po/de.po index 4be9326ff1..26cecbd004 100644 --- a/po/de.po +++ b/po/de.po @@ -11303,7 +11303,7 @@ msgid "Enabled" msgstr "Aktiviert" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfiguration des pmadb... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/el.po b/po/el.po index 24bc0dfc09..2168567850 100644 --- a/po/el.po +++ b/po/el.po @@ -11262,7 +11262,7 @@ msgid "Enabled" msgstr "Ενεργοποιημένη" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Ρύθμιση της pmadb… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/en_GB.po b/po/en_GB.po index 05d9abf9c0..7b7018e294 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -11596,7 +11596,7 @@ msgstr "Enabled" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuration saved." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/eo.po b/po/eo.po index a5a11e18d8..be79851aa2 100644 --- a/po/eo.po +++ b/po/eo.po @@ -10383,7 +10383,7 @@ msgid "Enabled" msgstr "Ŝaltita" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/es.po b/po/es.po index 95d72ffb33..ba11cce999 100644 --- a/po/es.po +++ b/po/es.po @@ -11300,7 +11300,7 @@ msgid "Enabled" msgstr "Habilitado" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuración de pmadb… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/et.po b/po/et.po index 33899e34a0..18f4ebe467 100644 --- a/po/et.po +++ b/po/et.po @@ -11060,7 +11060,7 @@ msgid "Enabled" msgstr "Lubatud" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "pmadb seadistus... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/eu.po b/po/eu.po index 5bfd76f629..395ac91f29 100644 --- a/po/eu.po +++ b/po/eu.po @@ -11584,7 +11584,7 @@ msgstr "Gaituta" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Aldaketak gorde dira" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/fa.po b/po/fa.po index 403a1b291e..bd2817abe6 100644 --- a/po/fa.po +++ b/po/fa.po @@ -11480,7 +11480,7 @@ msgstr "فعال" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "اصلاحات ذخيره گرديد" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/fi.po b/po/fi.po index beb7686443..08566b4e42 100644 --- a/po/fi.po +++ b/po/fi.po @@ -11362,7 +11362,7 @@ msgstr "Päällä" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Asetukset tallennettu." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/fr.po b/po/fr.po index 77d238b0de..960f6348db 100644 --- a/po/fr.po +++ b/po/fr.po @@ -11263,7 +11263,7 @@ msgid "Enabled" msgstr "Activé" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuration de pmadb… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/fy.po b/po/fy.po index 84f543ef48..8859588e32 100644 --- a/po/fy.po +++ b/po/fy.po @@ -10544,7 +10544,7 @@ msgid "Enabled" msgstr "Ynskeakele" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/gl.po b/po/gl.po index fa6f7b571f..ce5e3cbcce 100644 --- a/po/gl.po +++ b/po/gl.po @@ -11431,7 +11431,7 @@ msgstr "Activado" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuración gardada." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/he.po b/po/he.po index c974c9bfe0..7e94b8fbc9 100644 --- a/po/he.po +++ b/po/he.po @@ -11539,7 +11539,7 @@ msgstr "מופעל" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "שינויים נשמרו" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/hi.po b/po/hi.po index 1a70571b1f..013229d7fe 100644 --- a/po/hi.po +++ b/po/hi.po @@ -11836,7 +11836,7 @@ msgstr "सक्षम" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration storage" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "विन्यास भंडारण" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/hr.po b/po/hr.po index ade645881a..d5e8fc8d17 100644 --- a/po/hr.po +++ b/po/hr.po @@ -11944,7 +11944,7 @@ msgstr "Omogućeno" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Izmjene su spremljene" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/hu.po b/po/hu.po index 06e053f6fc..f5d58b449a 100644 --- a/po/hu.po +++ b/po/hu.po @@ -11294,7 +11294,7 @@ msgid "Enabled" msgstr "Engedélyezett" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "A pmadb beállítása… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/hy.po b/po/hy.po index ce4d72ad2a..b9d32f927e 100644 --- a/po/hy.po +++ b/po/hy.po @@ -10668,7 +10668,7 @@ msgid "Enabled" msgstr "Առկա" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ia.po b/po/ia.po index 44854ed11a..a30f0deea4 100644 --- a/po/ia.po +++ b/po/ia.po @@ -11178,7 +11178,7 @@ msgid "Enabled" msgstr "Habilitate" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuration de pmadb... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/id.po b/po/id.po index 83c8a63eb4..fd0dff5310 100644 --- a/po/id.po +++ b/po/id.po @@ -11845,7 +11845,7 @@ msgid "Enabled" msgstr "Aktif" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigurasi pmadb … " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/it.po b/po/it.po index 2c643709bf..712407b848 100644 --- a/po/it.po +++ b/po/it.po @@ -11286,7 +11286,7 @@ msgid "Enabled" msgstr "Abilitata" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configurazione di pmadb... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ja.po b/po/ja.po index 68cde47ecf..696244da25 100644 --- a/po/ja.po +++ b/po/ja.po @@ -12150,7 +12150,7 @@ msgstr "有効" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "設定を保存しました。" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ka.po b/po/ka.po index 1fd7788497..c44eff911b 100644 --- a/po/ka.po +++ b/po/ka.po @@ -12019,7 +12019,7 @@ msgstr "ჩართულია" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration file" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "კონფიგურაციის ფაილი" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/kk.po b/po/kk.po index 026d763299..c97d4e5df8 100644 --- a/po/kk.po +++ b/po/kk.po @@ -11006,7 +11006,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/km.po b/po/km.po index a9887f85d5..43603cf72a 100644 --- a/po/km.po +++ b/po/km.po @@ -10632,7 +10632,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/kn.po b/po/kn.po index a4812cbcce..2b81e7aae5 100644 --- a/po/kn.po +++ b/po/kn.po @@ -10395,7 +10395,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ko.po b/po/ko.po index c26b6ab400..c5cc580674 100644 --- a/po/ko.po +++ b/po/ko.po @@ -10965,7 +10965,7 @@ msgstr "사용가능" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "수정된 내용이 저장되었습니다." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ksh.po b/po/ksh.po index 4b78c59a2c..5f54248db8 100644 --- a/po/ksh.po +++ b/po/ksh.po @@ -10461,7 +10461,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ky.po b/po/ky.po index d2baa4895a..921ffaf5c5 100644 --- a/po/ky.po +++ b/po/ky.po @@ -10529,7 +10529,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/li.po b/po/li.po index e4bb262b1f..b62a74801c 100644 --- a/po/li.po +++ b/po/li.po @@ -10382,7 +10382,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/lt.po b/po/lt.po index 0d20040001..85570737d2 100644 --- a/po/lt.po +++ b/po/lt.po @@ -12126,7 +12126,7 @@ msgstr "Įjungta" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigūracija išsaugota." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/lv.po b/po/lv.po index de566c401e..e9f8d2351a 100644 --- a/po/lv.po +++ b/po/lv.po @@ -11572,7 +11572,7 @@ msgstr "Ieslēgts" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Labojumi tika saglabāti" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/mk.po b/po/mk.po index b2ce6facd6..24bccedc49 100644 --- a/po/mk.po +++ b/po/mk.po @@ -11697,7 +11697,7 @@ msgstr "Овозможено" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Измените се сочувани" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ml.po b/po/ml.po index 3c2aefa5e1..fb6dc38ce7 100644 --- a/po/ml.po +++ b/po/ml.po @@ -10675,7 +10675,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/mn.po b/po/mn.po index 886a4f26a6..29906fb364 100644 --- a/po/mn.po +++ b/po/mn.po @@ -11783,7 +11783,7 @@ msgstr "Нээлттэй" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Өөрчлөлт хадгалагдав" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ms.po b/po/ms.po index 6eaa16e16c..6e9b64c303 100644 --- a/po/ms.po +++ b/po/ms.po @@ -11409,7 +11409,7 @@ msgstr "Membenarkan" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Pengubahsuaian telah disimpan" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/nb.po b/po/nb.po index a9acfa1198..97cd520b42 100644 --- a/po/nb.po +++ b/po/nb.po @@ -11933,7 +11933,7 @@ msgstr "Påslått" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration storage" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigurasjonslager" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ne.po b/po/ne.po index 5ec1ef5364..5ab69a191b 100644 --- a/po/ne.po +++ b/po/ne.po @@ -10436,7 +10436,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/nl.po b/po/nl.po index 061fbade31..64e9581061 100644 --- a/po/nl.po +++ b/po/nl.po @@ -11244,7 +11244,7 @@ msgid "Enabled" msgstr "Ingeschakeld" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuratie van pmadb… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/pa.po b/po/pa.po index 973522d28a..9b425a1a59 100644 --- a/po/pa.po +++ b/po/pa.po @@ -10451,7 +10451,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/pl.po b/po/pl.po index c87fbd5e09..8d8c5f1d0a 100644 --- a/po/pl.po +++ b/po/pl.po @@ -11588,7 +11588,7 @@ msgstr "Włączone" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfiguracja zapisana." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/pt.po b/po/pt.po index 0d5be2e878..87b5ffc490 100644 --- a/po/pt.po +++ b/po/pt.po @@ -11546,7 +11546,7 @@ msgstr "Activado" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Modificações foram guardadas" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/pt_BR.po b/po/pt_BR.po index f857d579fc..d5633e486e 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -11451,7 +11451,7 @@ msgid "Enabled" msgstr "Habilitado" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuração de pmadb… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ro.po b/po/ro.po index d62514922a..330ba3019b 100644 --- a/po/ro.po +++ b/po/ro.po @@ -11976,7 +11976,7 @@ msgstr "Activat" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Modificările au fost salvate" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ru.po b/po/ru.po index 81b49f3251..f0daf4ef37 100644 --- a/po/ru.po +++ b/po/ru.po @@ -11194,7 +11194,7 @@ msgid "Enabled" msgstr "Доступно" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Конфигурация pmadb… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/si.po b/po/si.po index 4d310ae246..610474c087 100644 --- a/po/si.po +++ b/po/si.po @@ -11600,7 +11600,7 @@ msgstr "සක්‍රිය කරන ලද" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "වින්‍යාසය සුරකින ලදි." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/sk.po b/po/sk.po index 89a7446150..b03179c145 100644 --- a/po/sk.po +++ b/po/sk.po @@ -10901,7 +10901,7 @@ msgid "Enabled" msgstr "Zapnuté" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigurácia pmadb... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/sl.po b/po/sl.po index caa86c80ce..6af9b9a65b 100644 --- a/po/sl.po +++ b/po/sl.po @@ -11145,7 +11145,7 @@ msgid "Enabled" msgstr "Omogočeno" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfiguracija pmadb ... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/sq.po b/po/sq.po index aec965076b..95a720ed06 100644 --- a/po/sq.po +++ b/po/sq.po @@ -11218,7 +11218,7 @@ msgid "Enabled" msgstr "Aftëso" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigurimi i pmadb… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/sr.po b/po/sr.po index 87f3cf7a8a..317b4fd594 100644 --- a/po/sr.po +++ b/po/sr.po @@ -11844,7 +11844,7 @@ msgstr "Омогућено" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Измене су сачуване" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/sr@latin.po b/po/sr@latin.po index 8a09dfa181..784d3eeea1 100644 --- a/po/sr@latin.po +++ b/po/sr@latin.po @@ -11847,7 +11847,7 @@ msgstr "Omogućeno" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Podešavanja su sačuvana." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/sv.po b/po/sv.po index 176c5edcf1..d196ef7625 100644 --- a/po/sv.po +++ b/po/sv.po @@ -11079,7 +11079,7 @@ msgid "Enabled" msgstr "Aktiverat" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigurationen av pmadb... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ta.po b/po/ta.po index c265800587..c306ec3974 100644 --- a/po/ta.po +++ b/po/ta.po @@ -10831,7 +10831,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "pmadbஇன் அமைப்பாக்கம்... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/te.po b/po/te.po index 8f315feccc..e2f654845d 100644 --- a/po/te.po +++ b/po/te.po @@ -11314,7 +11314,7 @@ msgstr "" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Server configuration" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "సేవకి స్వరూపణం" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/th.po b/po/th.po index 7f2eb03611..bfab41c254 100644 --- a/po/th.po +++ b/po/th.po @@ -11553,7 +11553,7 @@ msgstr "เปิดใช้อยู่" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "บันทึกการแก้ไขเรียบร้อยแล้ว" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/tk.po b/po/tk.po index b5fa57fe62..fe7537326b 100644 --- a/po/tk.po +++ b/po/tk.po @@ -10498,7 +10498,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/tr.po b/po/tr.po index 766c6c38a5..71f19cf396 100644 --- a/po/tr.po +++ b/po/tr.po @@ -11166,7 +11166,7 @@ msgid "Enabled" msgstr "Etkinleştirildi" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "pmadb yapılandırması... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/tt.po b/po/tt.po index bf985ba37d..9f54b01e76 100644 --- a/po/tt.po +++ b/po/tt.po @@ -11724,7 +11724,7 @@ msgstr "Açıq" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Üzgärtülär saqlandı" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ug.po b/po/ug.po index d056fc9068..dcfb6b2908 100644 --- a/po/ug.po +++ b/po/ug.po @@ -11428,7 +11428,7 @@ msgstr "" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "ئۆزگەرتىشلەر ساقلاندى" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/uk.po b/po/uk.po index 3df81f2191..5ecaa29c3a 100644 --- a/po/uk.po +++ b/po/uk.po @@ -11440,7 +11440,7 @@ msgstr "дозволено" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Конфігурація збережена." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ur.po b/po/ur.po index 1e862de0da..3731ef17d6 100644 --- a/po/ur.po +++ b/po/ur.po @@ -11864,7 +11864,7 @@ msgstr "" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration storage" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "تشکیل ذخیرہ" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/uz.po b/po/uz.po index b2b76b566d..076544e151 100644 --- a/po/uz.po +++ b/po/uz.po @@ -12631,7 +12631,7 @@ msgstr "Фаоллаштирилган" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration file" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Конфигурацион файл" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/uz@latin.po b/po/uz@latin.po index e9864e2b9e..5076046e7d 100644 --- a/po/uz@latin.po +++ b/po/uz@latin.po @@ -12673,7 +12673,7 @@ msgstr "Faollashtirilgan" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration file" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfiguratsion fayl" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/vi.po b/po/vi.po index 880cdb9b71..1ec8aa18ee 100644 --- a/po/vi.po +++ b/po/vi.po @@ -10689,7 +10689,7 @@ msgid "Enabled" msgstr "Bật" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Cấu hình của pmadb…" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/vls.po b/po/vls.po index e8d5b9298d..43153c8c5d 100644 --- a/po/vls.po +++ b/po/vls.po @@ -10384,7 +10384,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/zh_CN.po b/po/zh_CN.po index ed5ffb7747..e5e5729a07 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -10779,7 +10779,7 @@ msgstr "已启用" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "配置已保存。" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/zh_TW.po b/po/zh_TW.po index c725140fa3..7835883c2f 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -10694,7 +10694,7 @@ msgid "Enabled" msgstr "已啓用" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "設定 pmadb ... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 From 3d61936b8b52dfe3d91612aefeacf949fad16f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 22 Jan 2016 11:07:05 +0100 Subject: [PATCH 24/79] Translated using Weblate (Czech) Currently translated at 95.8% (3077 of 3210 strings) [CI skip] --- po/cs.po | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/po/cs.po b/po/cs.po index ea3550cd8d..55c4f3b360 100644 --- a/po/cs.po +++ b/po/cs.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-17 16:48+0000\n" +"PO-Revision-Date: 2016-01-22 11:07+0000\n" "Last-Translator: Michal Čihař \n" "Language-Team: Czech " "\n" @@ -4708,9 +4708,9 @@ msgid "Skip Explain SQL" msgstr "Bez vysvětlení SQL" #: libraries/Util.class.php:1189 -#, fuzzy, php-format +#, php-format msgid "Analyze Explain at %s" -msgstr "Analyzovat výstup příkazu Explain na %s" +msgstr "Analyzovat výstup příkazu EXPLAIN na %s" #: libraries/Util.class.php:1220 msgid "Without PHP Code" @@ -7859,10 +7859,11 @@ msgid "Enable Zero Configuration mode" msgstr "Umožnit mód Automatické konfigurace" #: libraries/config/page_settings.class.php:140 -#, fuzzy #| msgid "Cannot save settings, submitted form contains errors!" msgid "Cannot save settings, submitted configuration form contains errors!" -msgstr "Nepodařilo se uložit nastavení, odeslaný formulář obsahuje chyby!" +msgstr "" +"Nepodařilo se uložit nastavení, odeslaný konfigurační formulář obsahuje " +"chyby!" #: libraries/config/setup.forms.php:40 msgid "Config authentication" @@ -11063,7 +11064,7 @@ msgstr "Zapnuto" #: libraries/relation.lib.php:100 msgid "Configuration of pmadb…" -msgstr "Konfigurace pmadb... " +msgstr "Konfigurace pmadb…" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 msgid "General relation features" From ac9b89b7afd26c7f503a0fda3bc1fffc2c213452 Mon Sep 17 00:00:00 2001 From: Masahiro Nishi Date: Fri, 22 Jan 2016 11:08:06 +0100 Subject: [PATCH 25/79] Translated using Weblate (Japanese) Currently translated at 67.6% (2170 of 3210 strings) [CI skip] --- po/ja.po | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/po/ja.po b/po/ja.po index 696244da25..6567ea44eb 100644 --- a/po/ja.po +++ b/po/ja.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-07 09:01+0000\n" -"Last-Translator: 初音ミク(Siketyan) \n" -"Language-Team: Japanese \n" +"PO-Revision-Date: 2016-01-22 11:08+0000\n" +"Last-Translator: Masahiro Nishi \n" +"Language-Team: Japanese " +"\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -949,10 +949,9 @@ msgstr "" "のデータも削除されます!" #: js/messages.php:65 -#, fuzzy #| msgid "Do you really want to delete the search \"%s\"?" msgid "Do you really want to TRUNCATE the selected partition(s)?" -msgstr "本当に検索「%s」の削除を実行しますか?" +msgstr "選択したパーティションを本当に削除しますか?" #: js/messages.php:66 #, fuzzy @@ -1071,10 +1070,9 @@ msgid "Preview SQL" msgstr "SQLのプレビュー" #: js/messages.php:113 -#, fuzzy #| msgid "in query" msgid "Simulate query" -msgstr "行/クエリ" +msgstr "クエリを検証" #: js/messages.php:114 #, fuzzy From 78cea78ab7ec475c2c7d69e055029620e56ba683 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Mon, 25 Jan 2016 08:35:16 +0100 Subject: [PATCH 26/79] Backport safety checks on version check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Backported from master/QA_4_5 Issue #11713 Signed-off-by: Michal Čihař --- libraries/VersionInformation.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/libraries/VersionInformation.php b/libraries/VersionInformation.php index c7363f8da7..c9b8561d66 100644 --- a/libraries/VersionInformation.php +++ b/libraries/VersionInformation.php @@ -25,7 +25,7 @@ class VersionInformation public function getLatestVersion() { if (!$GLOBALS['cfg']['VersionCheck']) { - return new stdClass(); + return null; } // wait 3s at most for server response, it's enough to get information @@ -88,11 +88,15 @@ class VersionInformation } $data = json_decode($response); - if (is_object($data) - && ! empty($data->version) - && ! empty($data->date) - && $save + if (! is_object($data) + || empty($data->version) + || empty($data->date) + || empty($data->releases) ) { + return null; + } + + if ($save) { if (! isset($_SESSION) && ! defined('TESTSUITE')) { ini_set('session.use_only_cookies', 'false'); ini_set('session.use_cookies', 'false'); @@ -267,4 +271,4 @@ class VersionInformation return PMA_Util::cacheGet('PMA_MYSQL_STR_VERSION'); } } -?> \ No newline at end of file +?> From 975e87d3924693a70ef5c3adf4da18708c2dae4b Mon Sep 17 00:00:00 2001 From: Adam Magnier Date: Fri, 22 Jan 2016 22:49:30 +0100 Subject: [PATCH 27/79] Translated using Weblate (French) Currently translated at 100.0% (3210 of 3210 strings) [CI skip] --- po/fr.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/fr.po b/po/fr.po index 960f6348db..b075b6cbf5 100644 --- a/po/fr.po +++ b/po/fr.po @@ -4,8 +4,8 @@ msgstr "" "Project-Id-Version: phpMyAdmin-docs 4.0.0-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-19 13:42+0000\n" -"Last-Translator: Marc Delisle \n" +"PO-Revision-Date: 2016-01-22 22:49+0000\n" +"Last-Translator: Adam Magnier \n" "Language-Team: French " "\n" "Language: fr\n" @@ -11264,7 +11264,7 @@ msgstr "Activé" #: libraries/relation.lib.php:100 msgid "Configuration of pmadb…" -msgstr "Configuration de pmadb… " +msgstr "Configuration de pmadb…" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 msgid "General relation features" From 25bcee40353a9fdd89ab3161379cfd66e618b125 Mon Sep 17 00:00:00 2001 From: Arturs Nikolajevs Date: Sat, 23 Jan 2016 11:11:46 +0100 Subject: [PATCH 28/79] Translated using Weblate (Latvian) Currently translated at 19.0% (611 of 3210 strings) [CI skip] --- po/lv.po | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/po/lv.po b/po/lv.po index e9f8d2351a..5a78eac64d 100644 --- a/po/lv.po +++ b/po/lv.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2015-10-15 11:23+0200\n" -"Last-Translator: Michal Čihař \n" -"Language-Team: Latvian \n" +"PO-Revision-Date: 2016-01-23 11:11+0000\n" +"Last-Translator: Arturs Nikolajevs \n" +"Language-Team: Latvian " +"\n" "Language: lv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -287,7 +287,6 @@ msgstr "Dati" #: db_export.php:67 libraries/DbSearch.class.php:446 #: libraries/display_export.lib.php:44 libraries/replication_gui.lib.php:379 -#, fuzzy #| msgid "Select All" msgid "Select all" msgstr "Iezīmēt visu" @@ -302,7 +301,7 @@ msgid "Database %1$s has been renamed to %2$s." msgstr "Datubāze %1$s tika pārsaukta par %2$s." #: db_operations.php:153 -#, fuzzy, php-format +#, php-format #| msgid "Database %1$s has been copied to %2$s." msgid "Database %1$s has been copied to %2$s." msgstr "Datubāze %1$s tika pārkopēta uz %2$s" From a8a9fa9032643c1448a85bf19d3eb8491a7986f8 Mon Sep 17 00:00:00 2001 From: Burak Yavuz Date: Fri, 22 Jan 2016 18:42:51 +0100 Subject: [PATCH 29/79] Translated using Weblate (Turkish) Currently translated at 100.0% (3210 of 3210 strings) [CI skip] --- po/tr.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/tr.po b/po/tr.po index 71f19cf396..0311ffa9e4 100644 --- a/po/tr.po +++ b/po/tr.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-15 14:15+0000\n" +"PO-Revision-Date: 2016-01-22 18:42+0000\n" "Last-Translator: Burak Yavuz \n" "Language-Team: Turkish " "\n" @@ -11167,7 +11167,7 @@ msgstr "Etkinleştirildi" #: libraries/relation.lib.php:100 msgid "Configuration of pmadb…" -msgstr "pmadb yapılandırması... " +msgstr "pmadb yapılandırması…" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 msgid "General relation features" From cd90c6ed131752a36e7da4480e47936286dc6d34 Mon Sep 17 00:00:00 2001 From: Daniel Iltanen Date: Mon, 25 Jan 2016 09:44:06 +0100 Subject: [PATCH 30/79] Translated using Weblate (Finnish) Currently translated at 67.5% (2168 of 3210 strings) [CI skip] --- po/fi.po | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/po/fi.po b/po/fi.po index 08566b4e42..58f7edbeea 100644 --- a/po/fi.po +++ b/po/fi.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2015-11-12 10:40+0000\n" -"Last-Translator: Michal Čihař \n" -"Language-Team: Finnish \n" +"PO-Revision-Date: 2016-01-25 09:44+0000\n" +"Last-Translator: Daniel Iltanen \n" +"Language-Team: Finnish " +"\n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -5279,7 +5279,7 @@ msgstr "" "Avaimen pitäisi sisältää kirjaimia, numeroita [em]ja[/em] erikoismerkkejä." #: libraries/config/ServerConfigChecks.class.php:382 -#, fuzzy, php-format +#, php-format #| msgid "" #| "a@?page=form&formset=features#tab_Security]option[/a] should be abled " #| "it allows attackers to bruteforce login to any MySQL server. you feel s " @@ -5296,7 +5296,7 @@ msgstr "" "Tämä %svalinta%s pitäisi poistaa käytöstä, sillä se sallii hyökkääjien " "kirjautua mihin tahansa MySQL-palvelimeen käyttämällä bruteforce-hyökkäystä. " "Jos tätä valintaa on pakko käyttää, käytä %srestrict login to MySQL server%s " -"or %sluotettujen välipalvelimien luetteloa%s. IP-osoitteeseen perustuva " +"tai %sluotettujen välipalvelimien luetteloa%s. IP-osoitteeseen perustuva " "suojaus ei kuitenkaan ole täysin luotettava mikäli IP-osoite kuuluu Internet-" "palveluntarjoajalle, johon sinun lisäksesi tuhannet käyttäjät ovat " "yhteydessä." @@ -7542,7 +7542,7 @@ msgstr "Näytä tietokannanluontilomake" #: libraries/config/messages.inc.php:847 msgid "Show or hide a column displaying the comments for all tables." -msgstr "" +msgstr "Näytä tai piilota kommentti -sarake kaikista tauluista." #: libraries/config/messages.inc.php:849 #, fuzzy From 9ca4b344464def11fe6b4d7ad748e2407863f2ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Tue, 26 Jan 2016 18:24:11 +0100 Subject: [PATCH 31/79] Add back hhvm, it should work MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 3f52732b20..6a5d23fd51 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,7 @@ php: - "7.0" - "5.6" - "5.5" + - "hhvm" sudo: false From df61ec1992a1a1438f0696a22c5b0cb09ea52bb9 Mon Sep 17 00:00:00 2001 From: Stefano Martinelli Date: Mon, 25 Jan 2016 17:24:17 +0100 Subject: [PATCH 32/79] Translated using Weblate (Italian) Currently translated at 100.0% (3210 of 3210 strings) [CI skip] --- po/it.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/it.po b/po/it.po index 712407b848..746c4c891a 100644 --- a/po/it.po +++ b/po/it.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-14 14:28+0000\n" +"PO-Revision-Date: 2016-01-25 17:24+0000\n" "Last-Translator: Stefano Martinelli \n" "Language-Team: Italian " "\n" @@ -11287,7 +11287,7 @@ msgstr "Abilitata" #: libraries/relation.lib.php:100 msgid "Configuration of pmadb…" -msgstr "Configurazione di pmadb... " +msgstr "Configurazione di pmadb…" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 msgid "General relation features" From 77922b22e4abd173646e5c694c8a8a584dabbce5 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Wed, 27 Jan 2016 21:39:52 +1100 Subject: [PATCH 33/79] fix #11881 Full processlist lost on refresh Signed-off-by: Madhura Jayaratne --- ChangeLog | 1 + libraries/server_status_processes.lib.php | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 743183a2f7..b6e2b56f70 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,7 @@ phpMyAdmin - ChangeLog - issue Undefined index: is_ajax_request - issue #11855 Fix password change on MariaDB 10.1 and newer - issue #11874 Validate version information before further processing it +- issue #11881 Full processlist lost on refresh 4.5.4.0 (not yet released) - issue #11724 live data edit of big sets is not working diff --git a/libraries/server_status_processes.lib.php b/libraries/server_status_processes.lib.php index a5cdf73e77..c00c0c2d18 100644 --- a/libraries/server_status_processes.lib.php +++ b/libraries/server_status_processes.lib.php @@ -165,6 +165,9 @@ function PMA_getHtmlForServerProcesslist() if ($is_sorted && $_REQUEST['sort_order'] === 'ASC') { $column['sort_order'] = 'DESC'; } + if (isset($_REQUEST['showExecuting'])) { + $column['showExecuting'] = 'on'; + } $retval .= ''; $columnUrl = PMA_URL_getCommon($column); @@ -244,7 +247,12 @@ function PMA_getHtmlForProcessListFilter() } $url_params = array( - 'ajax_request' => true + 'ajax_request' => true, + 'full' => (isset($_REQUEST['full']) ? $_REQUEST['full'] : ''), + 'column_name' => (isset($_REQUEST['column_name']) ? $_REQUEST['column_name'] : ''), + 'order_by_field' + => (isset($_REQUEST['order_by_field']) ? $_REQUEST['order_by_field'] : ''), + 'sort_order' => (isset($_REQUEST['sort_order']) ? $_REQUEST['sort_order'] : ''), ); $retval = ''; From 95dd3979817fdc70eafaae7d246cd22ab7249dab Mon Sep 17 00:00:00 2001 From: Deven Bansod Date: Fri, 29 Jan 2016 14:16:04 +0530 Subject: [PATCH 34/79] Fix issue 11834 Signed-off-by: Deven Bansod --- libraries/operations.lib.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/operations.lib.php b/libraries/operations.lib.php index 33e476693b..c8d9e9292f 100644 --- a/libraries/operations.lib.php +++ b/libraries/operations.lib.php @@ -588,6 +588,8 @@ function PMA_AdjustPrivileges_moveDB($oldDb, $newname) && $GLOBALS['is_reload_priv'] ) { $GLOBALS['dbi']->selectDb('mysql'); + $newname = str_replace("_", "\_", $newname); + $oldDb = str_replace("_", "\_", $oldDb); // For Db specific privileges $query_db_specific = 'UPDATE ' . PMA_Util::backquote('db') @@ -636,6 +638,8 @@ function PMA_AdjustPrivileges_copyDB($oldDb, $newname) && $GLOBALS['is_reload_priv'] ) { $GLOBALS['dbi']->selectDb('mysql'); + $newname = str_replace("_", "\_", $newname); + $oldDb = str_replace("_", "\_", $oldDb); $query_db_specific_old = 'SELECT * FROM ' . PMA_Util::backquote('db') . ' WHERE ' From c01622171f8114ff1222076805c07be6c41b6f09 Mon Sep 17 00:00:00 2001 From: Deven Bansod Date: Fri, 29 Jan 2016 23:30:24 +0530 Subject: [PATCH 35/79] ChangeLog entry for #11834 Signed-off-by: Deven Bansod --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index 32edfeeef9..8f03c3234c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,7 @@ phpMyAdmin - ChangeLog - issue #11855 Fix password change on MariaDB 10.1 and newer - issue #11874 Validate version information before further processing it - issue #11881 Full processlist lost on refresh +- issue #11834 Adjust privileges fails if database name contains underscores 4.5.4.0 (2016-01-28) - issue #11724 live data edit of big sets is not working From eb8ee811a49d8560cf2620240cb0635fb7e8aec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Sun, 31 Jan 2016 11:31:52 +0100 Subject: [PATCH 36/79] Translated using Weblate (Czech) Currently translated at 95.8% (3078 of 3210 strings) [CI skip] --- po/cs.po | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/po/cs.po b/po/cs.po index 55c4f3b360..70389bc9a9 100644 --- a/po/cs.po +++ b/po/cs.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-22 11:07+0000\n" +"PO-Revision-Date: 2016-01-31 11:31+0000\n" "Last-Translator: Michal Čihař \n" "Language-Team: Czech " "\n" @@ -8442,14 +8442,11 @@ msgstr "" "ale může to způsobit problémy s transakcemi.)" #: libraries/display_import.lib.php:309 -#, fuzzy #| msgid "" #| "Skip this number of queries (for SQL) or lines (for other formats), " #| "starting from the first one:" msgid "Skip this number of queries (for SQL) starting from the first one:" -msgstr "" -"Přeskočit daný počet dotazů (pro SQL) nebo řádek (pro ostatní formáty), " -"počínaje od:" +msgstr "Přeskočit daný počet dotazů (pro SQL) počínaje od:" #: libraries/display_import.lib.php:339 msgid "Other options:" From 3205d145d5dfc35ab7cedb74852732ed2b71aa43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=A0=CE=B1=CE=BD=CE=B1=CE=B3=CE=B9=CF=8E=CF=84=CE=B7?= =?UTF-8?q?=CF=82=20=CE=A0=CE=B1=CF=80=CE=AC=CE=B6=CE=BF=CE=B3=CE=BB=CE=BF?= =?UTF-8?q?=CF=85?= Date: Tue, 2 Feb 2016 10:26:36 +0100 Subject: [PATCH 37/79] Translated using Weblate (Greek) Currently translated at 100.0% (3210 of 3210 strings) [CI skip] --- po/el.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/el.po b/po/el.po index 2168567850..12c6f40839 100644 --- a/po/el.po +++ b/po/el.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-14 16:02+0000\n" +"PO-Revision-Date: 2016-02-02 10:26+0000\n" "Last-Translator: Παναγιώτης Παπάζογλου \n" "Language-Team: Greek " "\n" @@ -11263,7 +11263,7 @@ msgstr "Ενεργοποιημένη" #: libraries/relation.lib.php:100 msgid "Configuration of pmadb…" -msgstr "Ρύθμιση της pmadb… " +msgstr "Ρύθμιση της pmadb…" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 msgid "General relation features" From 4b096e6214e4b516537da81c4556d118a77425bd Mon Sep 17 00:00:00 2001 From: Pedro Moreira Date: Wed, 3 Feb 2016 19:51:04 +0100 Subject: [PATCH 38/79] Translated using Weblate (Portuguese (Brazil)) Currently translated at 92.8% (2979 of 3210 strings) [CI skip] --- po/pt_BR.po | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/po/pt_BR.po b/po/pt_BR.po index d5633e486e..9bba29f016 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2015-11-24 11:30+0000\n" -"Last-Translator: Jader Teixeira \n" -"Language-Team: Portuguese (Brazil) \n" +"PO-Revision-Date: 2016-02-03 19:50+0000\n" +"Last-Translator: Pedro Moreira \n" +"Language-Team: Portuguese (Brazil) " +"\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -967,7 +967,7 @@ msgstr "Você realmente deseja LIMPAR a(s) partição(ões) seleciona(s)?" #, fuzzy #| msgid "Do you really want to execute \"%s\"?" msgid "Do you really want to RESET SLAVE?" -msgstr "Você realmente deseja executar \"%s\"?" +msgstr "Você realmente deseja REINICIAR O SLAVE?" #: js/messages.php:68 msgid "" @@ -1012,7 +1012,7 @@ msgid "" "Are you sure you wish to change all the column collations and convert the " "data?" msgstr "" -"Tem certeza de que deseja mudar todos os agrupamentos de coluna e converter " +"Você tem certeza que quer mudar todos os agrupamento de colunas e converter " "os dados?" #: js/messages.php:89 @@ -2633,6 +2633,7 @@ msgstr "Você realmente deseja excluir a busca \"%s\"?" #: js/messages.php:601 msgid "Some error occurred while getting SQL debug info." msgstr "" +"Ocorreram alguns erros enquanto informações de debug do SQL eram gerados." #: js/messages.php:602 #, fuzzy, php-format @@ -2643,7 +2644,7 @@ msgstr "Consultas executadas" #: js/messages.php:603 #, php-format msgid "%s argument(s) passed" -msgstr "" +msgstr "%s parâmetro(s) passado(s)" #: js/messages.php:604 #, fuzzy @@ -2659,7 +2660,7 @@ msgstr "Ocultar resultados da pesquisa" #: js/messages.php:606 libraries/Console.class.php:321 msgid "Time taken:" -msgstr "" +msgstr "Tempo gasto:" #: js/messages.php:607 msgid "" @@ -2669,6 +2670,12 @@ msgid "" "cause such a problem, clearing your \"Offline Website Data\" might help. In " "Safari, such problem is commonly caused by \"Private Mode Browsing\"." msgstr "" +"Houve um problema ao acessar o armazenamento de seu navegador; algumas " +"funcionalidades podem estar incompletas. As probabilidades são de que seu " +"navegador não suporta armazenamento ou o limite foi atingido. No Firefox, " +"armazenamento corrompido também pode causar este problema e limpar os \"" +"Dados Offline de Sites\" pode ajudar. No Safari, este problema é normalmente " +"causado pelo \"Navegação Privada\"." #: js/messages.php:635 msgctxt "Previous month" @@ -3262,7 +3269,7 @@ msgstr "Executar sempre" #: libraries/Console.class.php:295 msgid "Time taken" -msgstr "" +msgstr "Tempo gasto" #: libraries/Console.class.php:298 #, fuzzy @@ -3386,7 +3393,7 @@ msgstr "Campo:" #: libraries/DBQbe.class.php:513 msgid "Alias:" -msgstr "" +msgstr "Apelido:" #: libraries/DBQbe.class.php:566 msgid "Sort:" @@ -3970,14 +3977,17 @@ msgstr "" "removida." #: libraries/Linter.class.php:96 +#, fuzzy msgid "" "Linting is disabled for this query because it exceeds the maximum length." msgstr "" +"A análise está desabilitada para esta query porque ela excede o tamanho " +"máximo." #: libraries/Linter.class.php:162 #, php-format msgid "%1$s (near %2$s)" -msgstr "" +msgstr "%1$s (próximo a %2$s)" #: libraries/Menu.class.php:203 libraries/ServerStatusData.class.php:442 #: libraries/config/messages.inc.php:933 From 0a47d2a529516904b5f2cfce2f486cfcf335c2db Mon Sep 17 00:00:00 2001 From: Stefano Martinelli Date: Thu, 4 Feb 2016 11:09:47 +0100 Subject: [PATCH 39/79] Translated using Weblate (Italian) Currently translated at 100.0% (3210 of 3210 strings) [CI skip] --- po/it.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/it.po b/po/it.po index 746c4c891a..d3375676f6 100644 --- a/po/it.po +++ b/po/it.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-25 17:24+0000\n" +"PO-Revision-Date: 2016-02-04 11:09+0000\n" "Last-Translator: Stefano Martinelli \n" "Language-Team: Italian " "\n" @@ -12779,7 +12779,7 @@ msgstr "Revoca tutti i privilegi attivi agli utenti e dopo li cancella." #: libraries/server_privileges.lib.php:3679 #: libraries/server_privileges.lib.php:3682 msgid "Drop the databases that have the same names as the users." -msgstr "Elimina i databases gli stessi nomi degli utenti." +msgstr "Elimina i database che hanno gli stessi nomi degli utenti." #: libraries/server_privileges.lib.php:3825 msgid "No users selected for deleting!" From 59fd4e0efc9435f7c08cc926e31beee7f2ca8a2c Mon Sep 17 00:00:00 2001 From: Durgesh <007durgesh219@gmail.com> Date: Mon, 8 Feb 2016 11:53:57 +0530 Subject: [PATCH 40/79] Fix Loading... banner shows on login screen, Issue #11906 Signed-off-by: Durgesh <007durgesh219@gmail.com> --- js/functions.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/js/functions.js b/js/functions.js index 1cf52831ab..78bbff68d4 100644 --- a/js/functions.js +++ b/js/functions.js @@ -872,6 +872,9 @@ AJAX.registerOnload('functions.js', function () { updateTimeout = window.setTimeout(UpdateIdleTime, 2000); } } else { //timeout occurred + if(isStorageSupported('sessionStorage')){ + window.sessionStorage.clear(); + } window.location.reload(true); clearInterval(IncInterval); } From 9b3a037ff4c7e288ce260890b85f9a2b0c7ce3a5 Mon Sep 17 00:00:00 2001 From: Atul Pratap Singh Date: Mon, 8 Feb 2016 20:58:37 +0530 Subject: [PATCH 41/79] changelog entry Signed-off-by: Atul Pratap Singh --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index 568a9eaf7f..02b3f827a1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,6 +7,7 @@ phpMyAdmin - ChangeLog - issue #11874 Validate version information before further processing it - issue #11881 Full processlist lost on refresh - issue #11834 Adjust privileges fails if database name contains underscores +- issue #11906 'Loading...' banner shows on login screen 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 From 5a00545bf83f400cf2460c9f36d0ab242438fbb5 Mon Sep 17 00:00:00 2001 From: Atul Pratap Singh Date: Mon, 8 Feb 2016 21:06:53 +0530 Subject: [PATCH 42/79] Add missing teardown Signed-off-by: Atul Pratap Singh --- js/navigation.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/js/navigation.js b/js/navigation.js index 2851ad48db..a4fd2724b7 100644 --- a/js/navigation.js +++ b/js/navigation.js @@ -538,6 +538,11 @@ AJAX.registerOnload('navigation.js', function () { } } }); +AJAX.registerTeardown('navigation.js', function () { + if (isStorageSupported('sessionStorage')) { + $(document).off('submit', 'form.config-form'); + } +}); /** * updates the tree state in sessionStorage From afe00d7c10f5894b33e0cd855669731787935018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Tue, 9 Feb 2016 16:49:53 +0100 Subject: [PATCH 43/79] The storage engine needs to be upper case all the time MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit So far the current was uppercase, but the possibly new was lower case leading to many weird effects. Fixes #11930 Signed-off-by: Michal Čihař --- ChangeLog | 1 + tbl_operations.php | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 02b3f827a1..986cea3f7a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,6 +8,7 @@ phpMyAdmin - ChangeLog - issue #11881 Full processlist lost on refresh - issue #11834 Adjust privileges fails if database name contains underscores - issue #11906 'Loading...' banner shows on login screen +- issue #11930 Fixed changing of table parameters, eg. AUTO_INCREMENT 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/tbl_operations.php b/tbl_operations.php index a4402d45f9..9dcaa6ffa0 100644 --- a/tbl_operations.php +++ b/tbl_operations.php @@ -136,9 +136,9 @@ if (isset($_REQUEST['submitoptions'])) { } if (! empty($_REQUEST['new_tbl_storage_engine']) - && /*overload*/mb_strtolower($_REQUEST['new_tbl_storage_engine']) !== $tbl_storage_engine + && /*overload*/mb_strtoupper($_REQUEST['new_tbl_storage_engine']) !== $tbl_storage_engine ) { - $new_tbl_storage_engine = $_REQUEST['new_tbl_storage_engine']; + $new_tbl_storage_engine = mb_strtoupper($_REQUEST['new_tbl_storage_engine']); // reset the globals for the new engine list($is_myisam_or_aria, $is_innodb, $is_isam, $is_berkeleydb, $is_aria, $is_pbxt From 7e12feba5440aca64570d14bae8af76c12b2e542 Mon Sep 17 00:00:00 2001 From: Dan Ungureanu Date: Wed, 10 Feb 2016 18:35:32 +0200 Subject: [PATCH 44/79] Updated sql-parser library to phpmyadmin/sql-parser@38b10f585ac012554f8a3d0dd6e7e3fd255ff94f (v3.1.0). The update includes multiple fixes: - Fixes #11885. Call to undefined function SqlParser\ctype_alnum() - Fixes #11879. 4.5.3.1 - NOW() function not recognized by parser - Fixes #11867. Gracefully handle the DESC statement - Fixes #11843. Fractional timestamp causes corrupted SQL export - Fixes #11836. Static analysis error for valid WHERE condition with IF keyword - Fixes #11800. Syntax Verifier error using REGEXP in SQL statement - Fixes #11799. Backslashes in comments are being interpreted as escape characters Signed-off-by: Dan Ungureanu --- .../sql-parser/src/Components/ArrayObj.php | 135 ++++++---- .../sql-parser/src/Components/Condition.php | 39 +-- .../src/Components/CreateDefinition.php | 2 +- .../sql-parser/src/Components/Expression.php | 234 +++++++++--------- .../src/Components/SetOperation.php | 2 +- libraries/sql-parser/src/Context.php | 9 +- .../src/Contexts/ContextMySql50000.php | 6 +- .../src/Contexts/ContextMySql50100.php | 6 +- .../src/Contexts/ContextMySql50500.php | 6 +- .../src/Contexts/ContextMySql50600.php | 6 +- .../src/Contexts/ContextMySql50700.php | 6 +- libraries/sql-parser/src/Parser.php | 1 + .../src/Statements/AlterStatement.php | 4 +- .../sql-parser/src/Utils/BufferedQuery.php | 20 +- libraries/sql-parser/src/Utils/Formatter.php | 4 +- 15 files changed, 272 insertions(+), 208 deletions(-) diff --git a/libraries/sql-parser/src/Components/ArrayObj.php b/libraries/sql-parser/src/Components/ArrayObj.php index fb199eacac..56c7247e9b 100644 --- a/libraries/sql-parser/src/Components/ArrayObj.php +++ b/libraries/sql-parser/src/Components/ArrayObj.php @@ -63,20 +63,32 @@ class ArrayObj extends Component $ret = empty($options['type']) ? new ArrayObj() : array(); /** - * The state of the parser. + * The last raw expression. * - * Below are the states of the parser. - * - * 0 -----------------------[ ( ]------------------------> 1 - * - * 1 ------------------[ array element ]-----------------> 2 - * - * 2 ------------------------[ , ]-----------------------> 1 - * 2 ------------------------[ ) ]-----------------------> (END) - * - * @var int $state + * @var string $lastRaw */ - $state = 0; + $lastRaw = ''; + + /** + * The last value. + * + * @var string $lastValue + */ + $lastValue = ''; + + /** + * Counts brackets. + * + * @var int $brackets + */ + $brackets = 0; + + /** + * Last separator (bracket or comma). + * + * @var boolean $isCommaLast + */ + $isCommaLast = false; for (; $list->idx < $list->count; ++$list->idx) { /** @@ -92,49 +104,72 @@ class ArrayObj extends Component } // Skipping whitespaces and comments. - if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { + if (($token->type === Token::TYPE_WHITESPACE) + || ($token->type === Token::TYPE_COMMENT) + ) { + $lastRaw .= $token->token; + $lastValue = trim($lastValue) .' '; continue; } - if ($state === 0) { - if (($token->type !== Token::TYPE_OPERATOR) || ($token->value !== '(')) { - $parser->error( - __('An opening bracket was expected.'), - $token - ); - break; - } - $state = 1; - } elseif ($state === 1) { - if (($token->type === Token::TYPE_OPERATOR) && ($token->value === ')')) { - // Empty array. - break; - } - if (empty($options['type'])) { - $ret->values[] = $token->value; - $ret->raw[] = $token->token; - } else { - $ret[] = $options['type']::parse( - $parser, - $list, - empty($options['typeOptions']) ? array() : $options['typeOptions'] - ); - } - $state = 2; - } elseif ($state === 2) { - if (($token->type !== Token::TYPE_OPERATOR) || (($token->value !== ',') && ($token->value !== ')'))) { - $parser->error( - __('A comma or a closing bracket was expected'), - $token - ); - break; - } - if ($token->value === ',') { - $state = 1; - } else { // ) - break; + if (($brackets === 0) + && (($token->type !== Token::TYPE_OPERATOR) + || ($token->value !== '(')) + ) { + $parser->error(__('An opening bracket was expected.'), $token); + break; + } + + if ($token->type === Token::TYPE_OPERATOR) { + if ($token->value === '(') { + if (++$brackets === 1) { // 1 is the base level. + continue; + } + } elseif ($token->value === ')') { + if (--$brackets === 0) { // Array ended. + break; + } + } elseif ($token->value === ',') { + if ($brackets === 1) { + $isCommaLast = true; + if (empty($options['type'])) { + $ret->raw[] = trim($lastRaw); + $ret->values[] = trim($lastValue); + $lastRaw = $lastValue = ''; + } + } + continue; } } + + if (empty($options['type'])) { + $lastRaw .= $token->token; + $lastValue .= $token->value; + } else { + $ret[] = $options['type']::parse( + $parser, + $list, + empty($options['typeOptions']) ? array() : $options['typeOptions'] + ); + } + } + + // Handling last element. + // + // This is treated differently to treat the following cases: + // + // => array() + // (,) => array('', '') + // () => array() + // (a,) => array('a', '') + // (a) => array('a') + // + $lastRaw = trim($lastRaw); + if ((empty($options['type'])) + && ((strlen($lastRaw) > 0) || ($isCommaLast)) + ) { + $ret->raw[] = $lastRaw; + $ret->values[] = trim($lastValue); } return $ret; diff --git a/libraries/sql-parser/src/Components/Condition.php b/libraries/sql-parser/src/Components/Condition.php index 9d7d586927..f820c93439 100644 --- a/libraries/sql-parser/src/Components/Condition.php +++ b/libraries/sql-parser/src/Components/Condition.php @@ -30,17 +30,18 @@ class Condition extends Component * * @var array */ - public static $DELIMITERS = array('&&', 'AND', 'OR', 'XOR', '||'); + public static $DELIMITERS = array('&&', '||', 'AND', 'OR', 'XOR'); /** - * Hash map containing reserved keywords that are also operators. + * List of allowed reserved keywords in conditions. * * @var array */ - public static $OPERATORS = array( + public static $ALLOWED_KEYWORDS = array( 'AND' => 1, 'BETWEEN' => 1, 'EXISTS' => 1, + 'IF' => 1, 'IN' => 1, 'IS' => 1, 'LIKE' => 1, @@ -106,6 +107,7 @@ class Condition extends Component /** * Whether there was a `BETWEEN` keyword before or not. + * * It is required to keep track of them because their structure contains * the keyword `AND`, which is also an operator that delimits * expressions. @@ -115,6 +117,7 @@ class Condition extends Component $betweenBefore = false; for (; $list->idx < $list->count; ++$list->idx) { + /** * Token parsed at this moment. * @@ -142,11 +145,12 @@ class Condition extends Component // Conditions are delimited by logical operators. if (in_array($token->value, static::$DELIMITERS, true)) { if (($betweenBefore) && ($token->value === 'AND')) { + // The syntax of keyword `BETWEEN` is hard-coded. $betweenBefore = false; } else { + // The expression ended. $expr->expr = trim($expr->expr); if (!empty($expr->expr)) { - // Adding the condition that is delimited by this operator. $ret[] = $expr; } @@ -155,11 +159,21 @@ class Condition extends Component $expr->isOperator = true; $ret[] = $expr; + // Preparing to parse another condition. $expr = new Condition(); continue; } } + if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) { + if ($token->value === 'BETWEEN') { + $betweenBefore = true; + } + if (($brackets === 0) && (empty(static::$ALLOWED_KEYWORDS[$token->value]))) { + break; + } + } + if ($token->type === Token::TYPE_OPERATOR) { if ($token->value === '(') { ++$brackets; @@ -168,23 +182,16 @@ class Condition extends Component } } - // No keyword is expected. - if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) { - if ($token->value === 'BETWEEN') { - $betweenBefore = true; - } - if (($brackets === 0) && (empty(static::$OPERATORS[$token->value]))) { - break; - } - } - $expr->expr .= $token->token; if (($token->type === Token::TYPE_NONE) - || (($token->type === Token::TYPE_KEYWORD) && (!($token->flags & Token::FLAG_KEYWORD_RESERVED))) + || (($token->type === Token::TYPE_KEYWORD) + && (!($token->flags & Token::FLAG_KEYWORD_RESERVED))) || ($token->type === Token::TYPE_STRING) || ($token->type === Token::TYPE_SYMBOL) ) { - $expr->identifiers[] = $token->value; + if (!in_array($token->value, $expr->identifiers)) { + $expr->identifiers[] = $token->value; + } } } diff --git a/libraries/sql-parser/src/Components/CreateDefinition.php b/libraries/sql-parser/src/Components/CreateDefinition.php index 21f44feaed..66ea4b2116 100644 --- a/libraries/sql-parser/src/Components/CreateDefinition.php +++ b/libraries/sql-parser/src/Components/CreateDefinition.php @@ -43,7 +43,7 @@ class CreateDefinition extends Component 'NOT NULL' => 1, 'NULL' => 1, - 'DEFAULT' => array(2, 'var'), + 'DEFAULT' => array(2, 'expr'), 'AUTO_INCREMENT' => 3, 'PRIMARY' => 4, 'PRIMARY KEY' => 4, diff --git a/libraries/sql-parser/src/Components/Expression.php b/libraries/sql-parser/src/Components/Expression.php index d91d9020f4..a365d321a1 100644 --- a/libraries/sql-parser/src/Components/Expression.php +++ b/libraries/sql-parser/src/Components/Expression.php @@ -28,6 +28,15 @@ use SqlParser\TokensList; class Expression extends Component { + /** + * List of allowed reserved keywords in expressions. + * + * @var array + */ + private static $ALLOWED_KEYWORDS = array( + 'AS' => 1, 'DUAL' => 1, 'NULL' => 1, 'REGEXP' => 1 + ); + /** * The name of this database. * @@ -137,9 +146,9 @@ class Expression extends Component /** * Whether an alias is expected. Is 2 if `AS` keyword was found. * - * @var int $alias + * @var bool $alias */ - $alias = 0; + $alias = false; /** * Counts brackets. @@ -149,17 +158,14 @@ class Expression extends Component $brackets = 0; /** - * Keeps track of the previous token. - * Possible values: - * string, if function was previously found; - * true, if opening bracket was previously found; - * null, in any other case. + * Keeps track of the last two previous tokens. * - * @var string|bool $prev + * @var Token[] $prev */ - $prev = null; + $prev = array(null, null); for (; $list->idx < $list->count; ++$list->idx) { + /** * Token parsed at this moment. * @@ -173,36 +179,48 @@ class Expression extends Component } // Skipping whitespaces and comments. - if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { - if (($isExpr) && (!$alias)) { + if (($token->type === Token::TYPE_WHITESPACE) + || ($token->type === Token::TYPE_COMMENT) + ) { + if ($isExpr) { $ret->expr .= $token->token; } - if (($alias === 0) && (empty($options['noAlias'])) && (!$isExpr) && (!$dot) && (!empty($ret->expr))) { - $alias = 1; - } continue; } - if (($token->type === Token::TYPE_KEYWORD) - && ($token->flags & Token::FLAG_KEYWORD_RESERVED) - && ($token->value !== 'DUAL') - && ($token->value !== 'NULL') - ) { - // Keywords may be found only between brackets. - if ($brackets === 0) { - if ((empty($options['noAlias'])) && ($token->value === 'AS')) { - $alias = 2; - continue; - } - if (!($token->flags & Token::FLAG_KEYWORD_FUNCTION)) { + if ($token->type === Token::TYPE_KEYWORD) { + if (($brackets > 0) && (empty($ret->subquery)) + && (!empty(Parser::$STATEMENT_PARSERS[$token->value])) + ) { + // A `(` was previously found and this keyword is the + // beginning of a statement, so this is a subquery. + $ret->subquery = $token->value; + } elseif ($token->flags & Token::FLAG_KEYWORD_FUNCTION) { + $isExpr = true; + } elseif (($token->flags & Token::FLAG_KEYWORD_RESERVED) + && ($brackets === 0) + ) { + if (empty(self::$ALLOWED_KEYWORDS[$token->value])) { + // A reserved keyword that is not allowed in the + // expression was found so the expression must have + // ended and a new clause is starting. break; } - } elseif ($prev === true) { - if ((empty($ret->subquery) && (!empty(Parser::$STATEMENT_PARSERS[$token->value])))) { - // A `(` was previously found and this keyword is the - // beginning of a statement, so this is a subquery. - $ret->subquery = $token->value; + if ($token->value === 'AS') { + if (!empty($options['noAlias'])) { + break; + } + if (!empty($ret->alias)) { + $parser->error( + __('An alias was previously found.'), + $token + ); + break; + } + $alias = true; + continue; } + $isExpr = true; } } @@ -210,22 +228,25 @@ class Expression extends Component if ((!empty($options['noBrackets'])) && (($token->value === '(') || ($token->value === ')')) ) { + // No brackets were expected. break; } if ($token->value === '(') { ++$brackets; - if ((empty($ret->function)) && ($prev !== null) && ($prev !== true)) { - // A function name was previously found and now an open - // bracket, so this is a function call. - $ret->function = $prev; + if ((empty($ret->function)) && ($prev[1] !== null) + && (($prev[1]->type === Token::TYPE_NONE) + || ($prev[1]->type === Token::TYPE_SYMBOL) + || (($prev[1]->type === Token::TYPE_KEYWORD) + && ($prev[1]->flags & Token::FLAG_KEYWORD_FUNCTION))) + ) { + $ret->function = $prev[1]->value; } - $isExpr = true; } elseif ($token->value === ')') { --$brackets; if ($brackets === 0) { if (!empty($options['bracketsDelimited'])) { - // The current token is the last brackets, the next - // one will be outside. + // The current token is the last bracket, the next + // one will be outside the expression. $ret->expr .= $token->token; ++$list->idx; break; @@ -236,109 +257,100 @@ class Expression extends Component break; } } elseif ($token->value === ',') { + // Expressions are comma-delimited. if ($brackets === 0) { break; } } } - if (($token->type === Token::TYPE_NUMBER) || ($token->type === Token::TYPE_BOOL) - || (($token->type === Token::TYPE_SYMBOL) && ($token->flags & Token::FLAG_SYMBOL_VARIABLE)) - || (($token->type === Token::TYPE_OPERATOR)) && ($token->value !== '.') + if (($token->type === Token::TYPE_NUMBER) + || ($token->type === Token::TYPE_BOOL) + || (($token->type === Token::TYPE_SYMBOL) + && ($token->flags & Token::FLAG_SYMBOL_VARIABLE)) + || (($token->type === Token::TYPE_OPERATOR) + && ($token->value !== '.')) ) { - // Numbers, booleans and operators are usually part of expressions. + // Numbers, booleans and operators (except dot) are usually part + // of expressions. $isExpr = true; } + // Saving the previous token. + $prev[0] = $prev[1]; + $prev[1] = $token; + if ($alias) { // An alias is expected (the keyword `AS` was previously found). if (!empty($ret->alias)) { $parser->error(__('An alias was previously found.'), $token); + break; } $ret->alias = $token->value; - $alias = 0; - } else { - if (!$isExpr) { - if (($token->type === Token::TYPE_OPERATOR) && ($token->value === '.')) { - // Found a `.` which means we expect a column name and - // the column name we parsed is actually the table name - // and the table name is actually a database name. - if ((!empty($ret->database)) || ($dot)) { - $parser->error(__('Unexpected dot.'), $token); - } - $ret->database = $ret->table; - $ret->table = $ret->column; - $ret->column = null; - $dot = true; - } else { - // We found the name of a column (or table if column - // field should be skipped; used to parse table names). - $field = (!empty($options['skipColumn'])) ? 'table' : 'column'; - if (!empty($ret->$field)) { - // No alias is expected. - if (!empty($options['noAlias'])) { - break; - } - - // Parsing aliases without `AS` keyword and any - // whitespace. - // Example: SELECT 1`foo` - if (($token->type === Token::TYPE_STRING) - || (($token->type === Token::TYPE_SYMBOL) - && ($token->flags & Token::FLAG_SYMBOL_BACKTICK)) - ) { - if (!empty($ret->alias)) { - $parser->error( - __('An alias was previously found.'), - $token - ); - } - $ret->alias = $token->value; - } - } else { - $ret->$field = $token->value; - } - $dot = false; + $alias = false; + } elseif ($isExpr) { + // Handling aliases. + if (/* (empty($ret->alias)) && */ ($brackets === 0) + && (($prev[0] === null) + || ((($prev[0]->type !== Token::TYPE_OPERATOR) + || ($prev[0]->token === ')')) + && (($prev[0]->type !== Token::TYPE_KEYWORD) + || (!($prev[0]->flags & Token::FLAG_KEYWORD_RESERVED))))) + && (($prev[1]->type === Token::TYPE_STRING) + || (($prev[1]->type === Token::TYPE_SYMBOL) + && (!($prev[1]->flags & Token::FLAG_SYMBOL_VARIABLE))) + || ($prev[1]->type === Token::TYPE_NONE)) + ) { + if (!empty($ret->alias)) { + $parser->error(__('An alias was previously found.'), $token); + break; } + $ret->alias = $prev[1]->value; } else { - // Parsing aliases without `AS` keyword. - // Example: SELECT 'foo' `bar` - if (($brackets === 0) && (empty($options['noAlias']))) { - if (($token->type === Token::TYPE_NONE) || ($token->type === Token::TYPE_STRING) - || (($token->type === Token::TYPE_SYMBOL) && ($token->flags & Token::FLAG_SYMBOL_BACKTICK)) - ) { - if (!empty($ret->alias)) { - $parser->error( - __('An alias was previously found.'), - $token - ); - } - $ret->alias = $token->value; - continue; + $ret->expr .= $token->token; + } + } elseif (!$isExpr) { + if (($token->type === Token::TYPE_OPERATOR) && ($token->value === '.')) { + // Found a `.` which means we expect a column name and + // the column name we parsed is actually the table name + // and the table name is actually a database name. + if ((!empty($ret->database)) || ($dot)) { + $parser->error(__('Unexpected dot.'), $token); + } + $ret->database = $ret->table; + $ret->table = $ret->column; + $ret->column = null; + $dot = true; + $ret->expr .= $token->token; + } else { + $field = (!empty($options['skipColumn'])) ? 'table' : 'column'; + if (empty($ret->$field)) { + $ret->$field = $token->value; + $ret->expr .= $token->token; + $dot = false; + } else { + // No alias is expected. + if (!empty($options['noAlias'])) { + break; } + if (!empty($ret->alias)) { + $parser->error(__('An alias was previously found.'), $token); + break; + } + $ret->alias = $token->value; } } - - $ret->expr .= $token->token; - } - - if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_FUNCTION)) { - $prev = strtoupper($token->value); - } elseif (($token->type === Token::TYPE_OPERATOR) || ($token->value === '(')) { - $prev = true; - } else { - $prev = null; } } - if ($alias === 2) { + if ($alias) { $parser->error( __('An alias was expected.'), $list->tokens[$list->idx - 1] ); } - // Whitespaces might be added at the end. + // White-spaces might be added at the end. $ret->expr = trim($ret->expr); if (empty($ret->expr)) { diff --git a/libraries/sql-parser/src/Components/SetOperation.php b/libraries/sql-parser/src/Components/SetOperation.php index 427f48d7dd..38aa7f6262 100644 --- a/libraries/sql-parser/src/Components/SetOperation.php +++ b/libraries/sql-parser/src/Components/SetOperation.php @@ -92,7 +92,7 @@ class SetOperation extends Component if ($state === 0) { if ($token->token === '=') { $state = 1; - } else if ($token->value !== ',') { + } elseif ($token->value !== ',') { $expr->column .= $token->token; } } elseif ($state === 1) { diff --git a/libraries/sql-parser/src/Context.php b/libraries/sql-parser/src/Context.php index 40cd93470b..7637953ab5 100644 --- a/libraries/sql-parser/src/Context.php +++ b/libraries/sql-parser/src/Context.php @@ -107,7 +107,7 @@ abstract class Context ':=' => 8, // @see Token::FLAG_OPERATOR_SQL - '(' => 16, ')' => 16, '.' => 16, ',' => 16, + '(' => 16, ')' => 16, '.' => 16, ',' => 16, ';' => 16, ); /** @@ -397,9 +397,12 @@ abstract class Context */ public static function isSeparator($str) { - // NOTES: Only ASCII characters may be separators. + // NOTES: Only non alphanumeric ASCII characters may be separators. // `~` is the last printable ASCII character. - return ($str <= '~') && (!ctype_alnum($str)) && ($str !== '_'); + return ($str <= '~') && ($str !== '_') + && (($str < '0') || ($str > '9')) + && (($str < 'a') || ($str > 'z')) + && (($str < 'A') || ($str > 'Z')); } /** diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50000.php b/libraries/sql-parser/src/Contexts/ContextMySql50000.php index ceedd1704a..91f1179e0d 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50000.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50000.php @@ -37,8 +37,8 @@ class ContextMySql50000 extends Context public static $KEYWORDS = array( 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'BDB' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, - 'NDB' => 1, 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, + 'ANY' => 1, 'BDB' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, + 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, 'LAST' => 1, 'LOGS' => 1, 'MODE' => 1, 'NAME' => 1, 'NEXT' => 1, 'NONE' => 1, 'OPEN' => 1, 'PAGE' => 1, @@ -162,7 +162,7 @@ class ContextMySql50000 extends Context 'DEFAULT CHARACTER SET' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - 'XML' => 9, + 'BIT' => 9, 'XML' => 9, 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, 'ARRAY' => 9, 'SERIAL' => 9, diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50100.php b/libraries/sql-parser/src/Contexts/ContextMySql50100.php index 07ea04a2b5..a62d2ecaf1 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50100.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50100.php @@ -37,8 +37,8 @@ class ContextMySql50100 extends Context public static $KEYWORDS = array( 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'BDB' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, - 'NDB' => 1, 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, + 'ANY' => 1, 'BDB' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, + 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'GOTO' => 1, 'HASH' => 1, 'HELP' => 1, 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, @@ -175,7 +175,7 @@ class ContextMySql50100 extends Context 'DEFAULT CHARACTER SET' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - 'XML' => 9, + 'BIT' => 9, 'XML' => 9, 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, 'ARRAY' => 9, 'SERIAL' => 9, diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50500.php b/libraries/sql-parser/src/Contexts/ContextMySql50500.php index a56ba1bb65..03dd24f033 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50500.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50500.php @@ -37,8 +37,8 @@ class ContextMySql50500 extends Context public static $KEYWORDS = array( 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, - 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, + 'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1, + 'ONE' => 1, 'ROW' => 1, 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1, @@ -180,7 +180,7 @@ class ContextMySql50500 extends Context 'DEFAULT CHARACTER SET' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - 'XML' => 9, + 'BIT' => 9, 'XML' => 9, 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, 'ARRAY' => 9, 'SERIAL' => 9, diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50600.php b/libraries/sql-parser/src/Contexts/ContextMySql50600.php index 481cff5698..3773d233e2 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50600.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50600.php @@ -37,8 +37,8 @@ class ContextMySql50600 extends Context public static $KEYWORDS = array( 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, - 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, + 'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1, + 'ONE' => 1, 'ROW' => 1, 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1, @@ -186,7 +186,7 @@ class ContextMySql50600 extends Context 'DEFAULT CHARACTER SET' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - 'XML' => 9, + 'BIT' => 9, 'XML' => 9, 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, 'ARRAY' => 9, 'SERIAL' => 9, diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50700.php b/libraries/sql-parser/src/Contexts/ContextMySql50700.php index 14daee2682..c4867c2a7b 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50700.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50700.php @@ -37,8 +37,8 @@ class ContextMySql50700 extends Context public static $KEYWORDS = array( 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, - 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, 'XID' => 1, + 'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1, + 'ONE' => 1, 'ROW' => 1, 'XID' => 1, 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1, @@ -193,7 +193,7 @@ class ContextMySql50700 extends Context 'DEFAULT CHARACTER SET' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - 'XML' => 9, + 'BIT' => 9, 'XML' => 9, 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, 'ARRAY' => 9, 'SERIAL' => 9, diff --git a/libraries/sql-parser/src/Parser.php b/libraries/sql-parser/src/Parser.php index c050e42d7e..2aca938a21 100644 --- a/libraries/sql-parser/src/Parser.php +++ b/libraries/sql-parser/src/Parser.php @@ -36,6 +36,7 @@ class Parser // MySQL Utility Statements 'DESCRIBE' => 'SqlParser\\Statements\\ExplainStatement', + 'DESC' => 'SqlParser\\Statements\\ExplainStatement', 'EXPLAIN' => 'SqlParser\\Statements\\ExplainStatement', 'FLUSH' => '', 'GRANT' => '', diff --git a/libraries/sql-parser/src/Statements/AlterStatement.php b/libraries/sql-parser/src/Statements/AlterStatement.php index 4da360aafc..275eae7011 100644 --- a/libraries/sql-parser/src/Statements/AlterStatement.php +++ b/libraries/sql-parser/src/Statements/AlterStatement.php @@ -76,8 +76,8 @@ class AlterStatement extends Statement $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, + 'noAlias' => true, + 'noBrackets' => true, ) ); ++$list->idx; // Skipping field. diff --git a/libraries/sql-parser/src/Utils/BufferedQuery.php b/libraries/sql-parser/src/Utils/BufferedQuery.php index f399220b22..1aaa9d7910 100644 --- a/libraries/sql-parser/src/Utils/BufferedQuery.php +++ b/libraries/sql-parser/src/Utils/BufferedQuery.php @@ -29,12 +29,18 @@ class BufferedQuery { // Constants that describe the current status of the parser. - const STATUS_STRING_SINGLE_QUOTES = 1; - const STATUS_STRING_DOUBLE_QUOTES = 2; - const STATUS_STRING_BACKTICK = 3; - const STATUS_COMMENT_BASH = 4; - const STATUS_COMMENT_C = 5; - const STATUS_COMMENT_SQL = 6; + + // A string is being parsed. + const STATUS_STRING = 16; // 0001 0000 + const STATUS_STRING_SINGLE_QUOTES = 17; // 0001 0001 + const STATUS_STRING_DOUBLE_QUOTES = 18; // 0001 0010 + const STATUS_STRING_BACKTICK = 20; // 0001 0100 + + // A comment is being parsed. + const STATUS_COMMENT = 32; // 0010 0000 + const STATUS_COMMENT_BASH = 33; // 0010 0001 + const STATUS_COMMENT_C = 34; // 0010 0010 + const STATUS_COMMENT_SQL = 36; // 0010 0100 /** * The query that is being processed. @@ -193,7 +199,7 @@ class BufferedQuery * treated differently, because of the preceding backslash, it will * be ignored. */ - if ($this->query[$i] === '\\') { + if (($this->status & static::STATUS_COMMENT == 0) && ($this->query[$i] === '\\')) { $this->current .= $this->query[$i] . $this->query[++$i]; continue; } diff --git a/libraries/sql-parser/src/Utils/Formatter.php b/libraries/sql-parser/src/Utils/Formatter.php index 7ff13463f6..266440bcd6 100644 --- a/libraries/sql-parser/src/Utils/Formatter.php +++ b/libraries/sql-parser/src/Utils/Formatter.php @@ -305,8 +305,8 @@ class Formatter && (!$formattedOptions) && (empty(self::$INLINE_CLAUSES[$lastClause])) && (($curr->type !== Token::TYPE_KEYWORD) - || (($curr->type === Token::TYPE_KEYWORD) - && ($curr->flags & Token::FLAG_KEYWORD_FUNCTION))) + || (($curr->type === Token::TYPE_KEYWORD) + && ($curr->flags & Token::FLAG_KEYWORD_FUNCTION))) ) { $formattedOptions = true; $lineEnded = true; From 9389db2916c334c3c475dab9fa9f2cd0a76a9a70 Mon Sep 17 00:00:00 2001 From: Dan Ungureanu Date: Wed, 10 Feb 2016 18:36:44 +0200 Subject: [PATCH 45/79] Added changelog entries for 7e12feba5440aca64570d14bae8af76c12b2e542. Signed-off-by: Dan Ungureanu --- ChangeLog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ChangeLog b/ChangeLog index 986cea3f7a..6c9b34f94e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -9,6 +9,13 @@ phpMyAdmin - ChangeLog - issue #11834 Adjust privileges fails if database name contains underscores - issue #11906 'Loading...' banner shows on login screen - issue #11930 Fixed changing of table parameters, eg. AUTO_INCREMENT +- issue #11885 Call to undefined function SqlParser\ctype_alnum() +- issue #11879 4.5.3.1 - NOW() function not recognized by parser +- issue #11867 Gracefully handle the DESC statement +- issue #11843 Fractional timestamp causes corrupted SQL export +- issue #11836 Static analysis error for valid WHERE condition with IF keyword +- issue #11800 Syntax Verifier error using REGEXP in SQL statement +- issue #11799 Backslashes in comments are being interpreted as escape characters 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 From 59342451abae66b969dd7acd9818f678058990d6 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Thu, 11 Feb 2016 21:02:33 +1100 Subject: [PATCH 46/79] Fix #11909 Can't insert row into table that contains generated column Signed-off-by: Madhura Jayaratne Conflicts: ChangeLog --- ChangeLog | 1 + libraries/insert_edit.lib.php | 7 +++++++ tbl_replace.php | 20 +++++++++++++------- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6c9b34f94e..8be22c177f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16,6 +16,7 @@ phpMyAdmin - ChangeLog - issue #11836 Static analysis error for valid WHERE condition with IF keyword - issue #11800 Syntax Verifier error using REGEXP in SQL statement - issue #11799 Backslashes in comments are being interpreted as escape characters +- issue #11909 Can't insert row into table that contains generated column 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/insert_edit.lib.php b/libraries/insert_edit.lib.php index c277091156..573731a4e8 100644 --- a/libraries/insert_edit.lib.php +++ b/libraries/insert_edit.lib.php @@ -1273,6 +1273,13 @@ function PMA_getValueColumnForOtherDatatypes($column, $default_char_editing, $onChangeClause, $tabindex, $tabindex_for_value, $idindex, $data_type ); + $virtual = array( + 'VIRTUAL', 'PERSISTENT', 'VIRTUAL GENERATED', 'STORED GENERATED' + ); + if (in_array($column['Extra'], $virtual)) { + $html_output .= ''; + } if ($column['Extra'] == 'auto_increment') { $html_output .= ''; diff --git a/tbl_replace.php b/tbl_replace.php index 00d37a335e..9e61c13ff2 100644 --- a/tbl_replace.php +++ b/tbl_replace.php @@ -182,6 +182,10 @@ foreach ($loop_array as $rownumber => $where_clause) { = isset($_REQUEST['auto_increment']['multi_edit'][$rownumber]) ? $_REQUEST['auto_increment']['multi_edit'][$rownumber] : null; + $multi_edit_virtual + = isset($_REQUEST['virtual']['multi_edit'][$rownumber]) + ? $_REQUEST['virtual']['multi_edit'][$rownumber] + : null; // When a select field is nullified, it's not present in $_REQUEST // so initialize it; this way, the foreach($multi_edit_columns) will process it @@ -262,13 +266,15 @@ foreach ($loop_array as $rownumber => $where_clause) { $gis_from_wkb_functions, $func_optional_param, $func_no_param, $key ); - list($query_values, $query_fields) - = PMA_getQueryValuesForInsertAndUpdateInMultipleEdit( - $multi_edit_columns_name, $multi_edit_columns_null, $current_value, - $multi_edit_columns_prev, $multi_edit_funcs, $is_insert, - $query_values, $query_fields, $current_value_as_an_array, - $value_sets, $key, $multi_edit_columns_null_prev - ); + if (! isset($multi_edit_virtual) || ! isset($multi_edit_virtual[$key])) { + list($query_values, $query_fields) + = PMA_getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, $multi_edit_columns_null, $current_value, + $multi_edit_columns_prev, $multi_edit_funcs, $is_insert, + $query_values, $query_fields, $current_value_as_an_array, + $value_sets, $key, $multi_edit_columns_null_prev + ); + } if (isset($multi_edit_columns_null[$key])) { $multi_edit_columns[$key] = null; } From 3d196ef57f5284370652f2d8fb4436a26fc5a99e Mon Sep 17 00:00:00 2001 From: Dan Ungureanu Date: Thu, 11 Feb 2016 16:12:28 +0200 Subject: [PATCH 47/79] Fixes #11677. sql-parser and php-gettext collide. Signed-off-by: Dan Ungureanu --- ChangeLog | 1 + libraries/sql-parser/autoload.php | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/ChangeLog b/ChangeLog index 8be22c177f..4481c3f1f8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -17,6 +17,7 @@ phpMyAdmin - ChangeLog - issue #11800 Syntax Verifier error using REGEXP in SQL statement - issue #11799 Backslashes in comments are being interpreted as escape characters - issue #11909 Can't insert row into table that contains generated column +- issue #11677 sql-parser and php-gettext collide. 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/sql-parser/autoload.php b/libraries/sql-parser/autoload.php index da6bfe0a8c..21298b6ced 100644 --- a/libraries/sql-parser/autoload.php +++ b/libraries/sql-parser/autoload.php @@ -63,6 +63,12 @@ class AutoloaderInit } } +// php-gettext is used to translate error messages. +// This must be included before any class of the parser is loaded because +// if there is no `__` function defined, the library defines a dummy one +// in `common.php`. +require_once './libraries/php-gettext/gettext.inc'; + // Initializing the autoloader. return AutoloaderInit::getLoader( array( From e2bc11c4fff4a0a0f81ebed9f6f5a409a5d849f3 Mon Sep 17 00:00:00 2001 From: Isaac Bennetch Date: Thu, 11 Feb 2016 12:00:36 -0500 Subject: [PATCH 48/79] Document some known issues Signed-off-by: Isaac Bennetch --- doc/setup.rst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/doc/setup.rst b/doc/setup.rst index a6912cb618..8615a388a1 100644 --- a/doc/setup.rst +++ b/doc/setup.rst @@ -652,3 +652,21 @@ are always ways to make your installation more secure: * If you are afraid of automated attacks, enabling Captcha by :config:option:`$cfg['CaptchaLoginPublicKey']` and :config:option:`$cfg['CaptchaLoginPrivateKey']` might be an option. + +Known issues +++++++++++++ + +Users with column-specific privileges are unable to "Browse" +------------------------------------------------------------ + +If a user has only column-specific privileges on some (but not all) columns in a table, "Browse" +will fail with an error message. + +As a workaround, a bookmarked query with the same name as the table can be created, this will +run when using the "Browse" link instead. `Issue 11922 `_. + +Trouble logging back in after logging out using 'http' authentication +---------------------------------------------------------------------- + +When using the 'http' ``auth_type``, it can be impossible to log back in (when the logout comes +manually or after a period of inactivity). `Issue 11898 `_. From 490325c89dcdda5dd6dd492ebe90fb91314c96d3 Mon Sep 17 00:00:00 2001 From: Dan Ungureanu Date: Fri, 12 Feb 2016 09:37:03 +0200 Subject: [PATCH 49/79] Fixes #11920. Can't disable backquotes in export Updated sql-parser to phpmyadmin/sql-parser@de8b3efbbca418f7c867909dbcb3fbe4b4a20497 (v3.2.0). Signed-off-by: Dan Ungureanu --- ChangeLog | 1 + libraries/plugins/export/ExportSql.class.php | 6 ++++++ libraries/sql-parser/src/Context.php | 14 ++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/ChangeLog b/ChangeLog index 4481c3f1f8..147f9b6f8f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -18,6 +18,7 @@ phpMyAdmin - ChangeLog - issue #11799 Backslashes in comments are being interpreted as escape characters - issue #11909 Can't insert row into table that contains generated column - issue #11677 sql-parser and php-gettext collide. +- issue #11920 Can't disable backquotes in export 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/plugins/export/ExportSql.class.php b/libraries/plugins/export/ExportSql.class.php index 9371131d36..5b68c22667 100644 --- a/libraries/plugins/export/ExportSql.class.php +++ b/libraries/plugins/export/ExportSql.class.php @@ -1551,6 +1551,12 @@ class ExportSql extends ExportPlugin // analysis. if (!$view) { + if (empty($sql_backquotes)) { + // Option "Enclose table and column names with backquotes" + // was checked. + Context::$MODE |= Context::NO_ENCLOSING_QUOTES; + } + // Using appropriate quotes. if (($compat === 'MSSQL') || ($sql_backquotes === '"')) { SqlParser\Context::$MODE |= SqlParser\Context::ANSI_QUOTES; diff --git a/libraries/sql-parser/src/Context.php b/libraries/sql-parser/src/Context.php index 7637953ab5..a62fa16b9e 100644 --- a/libraries/sql-parser/src/Context.php +++ b/libraries/sql-parser/src/Context.php @@ -190,6 +190,13 @@ abstract class Context // https://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sqlmode_strict_trans_tables const STRICT_TRANS_TABLES = 1048576; + // Custom modes. + + // The table and column names and any other field that must be escaped will + // not be. + // Reserved keywords are being escaped regardless this mode is used or not. + const NO_ENCLOSING_QUOTES = 1073741824; + /* * Combination SQL Modes * https://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sql-mode-combo @@ -520,9 +527,16 @@ abstract class Context return $str; } + if ((static::$MODE & Context::NO_ENCLOSING_QUOTES) + && (!static::isKeyword($str, true)) + ) { + return $str; + } + if (static::$MODE & Context::ANSI_QUOTES) { $quote = '"'; } + return $quote . str_replace($quote, $quote . $quote, $str) . $quote; } } From 04181fb2b9869e5e5a1365d7a6f03c92aec0632d Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Fri, 12 Feb 2016 19:32:52 +1100 Subject: [PATCH 50/79] Fix #11911 Inserts via tbl_change.php in VARBINARY columns does not allow using HEX() and MD5() Signed-off-by: Madhura Jayaratne --- ChangeLog | 1 + libraries/insert_edit.lib.php | 6 +++++- tbl_replace.php | 2 +- test/libraries/PMA_insert_edit_test.php | 20 ++++++++++---------- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 147f9b6f8f..33e34dd3d0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19,6 +19,7 @@ phpMyAdmin - ChangeLog - issue #11909 Can't insert row into table that contains generated column - issue #11677 sql-parser and php-gettext collide. - issue #11920 Can't disable backquotes in export +- issue #11911 Inserts via tbl_change.php in VARBINARY columns does not allow using HEX() and MD5() 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/insert_edit.lib.php b/libraries/insert_edit.lib.php index 573731a4e8..91bb8bf488 100644 --- a/libraries/insert_edit.lib.php +++ b/libraries/insert_edit.lib.php @@ -2281,13 +2281,15 @@ function PMA_getQueryValuesForInsertAndUpdateInMultipleEdit($multi_edit_columns_ * @param boolean $using_key whether editing or new row * @param string $where_clause where clause * @param string $table table name + * @param array $multi_edit_funcs multiple edit functions array * * @return string $current_value current column value in the form */ function PMA_getCurrentValueForDifferentTypes($possibly_uploaded_val, $key, $multi_edit_columns_type, $current_value, $multi_edit_auto_increment, $rownumber, $multi_edit_columns_name, $multi_edit_columns_null, - $multi_edit_columns_null_prev, $is_insert, $using_key, $where_clause, $table + $multi_edit_columns_null_prev, $is_insert, $using_key, $where_clause, $table, + $multi_edit_funcs ) { // Fetch the current values of a row to use in case we have a protected field if ($is_insert @@ -2302,6 +2304,8 @@ function PMA_getCurrentValueForDifferentTypes($possibly_uploaded_val, $key, if (false !== $possibly_uploaded_val) { $current_value = $possibly_uploaded_val; + } else if (! empty($multi_edit_funcs[$key])) { + $current_value = "'" . PMA_Util::sqlAddSlashes($current_value) . "'"; } else { // c o l u m n v a l u e i n t h e f o r m if (isset($multi_edit_columns_type[$key])) { diff --git a/tbl_replace.php b/tbl_replace.php index 9e61c13ff2..a81f9ccb02 100644 --- a/tbl_replace.php +++ b/tbl_replace.php @@ -257,7 +257,7 @@ foreach ($loop_array as $rownumber => $where_clause) { $current_value, $multi_edit_auto_increment, $rownumber, $multi_edit_columns_name, $multi_edit_columns_null, $multi_edit_columns_null_prev, $is_insert, - $using_key, $where_clause, $table + $using_key, $where_clause, $table, $multi_edit_funcs ); $current_value_as_an_array = PMA_getCurrentValueAsAnArrayForMultipleEdit( diff --git a/test/libraries/PMA_insert_edit_test.php b/test/libraries/PMA_insert_edit_test.php index 94c5bd3070..3b2b4a649a 100644 --- a/test/libraries/PMA_insert_edit_test.php +++ b/test/libraries/PMA_insert_edit_test.php @@ -2444,7 +2444,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase $result = PMA_getCurrentValueForDifferentTypes( '123', '0', array(), '', array(), 0, array(), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2455,7 +2455,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 2 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('test'), '', array(1), 0, array(), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2466,7 +2466,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 3 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('test'), '', array(), 0, array(), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2478,7 +2478,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase $_REQUEST['fields']['multi_edit'][0][0] = array(); $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('set'), '', array(), 0, array(), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2489,7 +2489,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 5 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('protected'), '', array(), 0, array('a'), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2500,7 +2500,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 6 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('protected'), '', array(), 0, array('a'), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2511,7 +2511,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 7 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('bit'), '20\'12', array(), 0, array('a'), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2522,7 +2522,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 7 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('date'), '20\'12', array(), 0, array('a'), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2534,7 +2534,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase $_REQUEST['fields']['multi_edit'][0][0] = array(); $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('set'), '', array(), 0, array(), array(1), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2545,7 +2545,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 9 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('protected'), '', array(), 0, array('a'), array(), - array(1), true, true, '1', 'table' + array(1), true, true, '1', 'table', array() ); $this->assertEquals( From 6566e9491438dc46f5accb7540b0c9a178689092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 09:57:30 +0100 Subject: [PATCH 51/79] Correct content type for uploaded error reports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #11939 Signed-off-by: Michal Čihař --- ChangeLog | 1 + libraries/error_report.lib.php | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 33e34dd3d0..68ffc4c543 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,7 @@ phpMyAdmin - ChangeLog - issue #11677 sql-parser and php-gettext collide. - issue #11920 Can't disable backquotes in export - issue #11911 Inserts via tbl_change.php in VARBINARY columns does not allow using HEX() and MD5() +- issue #11939 Correct content type for uploaded error reports 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/error_report.lib.php b/libraries/error_report.lib.php index 0ac7ce56b8..ad333f4f8a 100644 --- a/libraries/error_report.lib.php +++ b/libraries/error_report.lib.php @@ -194,7 +194,7 @@ function PMA_sendErrorReport($report) array( 'method' => 'POST', 'content' => $data_string, - 'header' => "Content-Type: multipart/form-data\r\n", + 'header' => "Content-Type: application/json\r\n", ) ); $context = PMA_Util::handleContext($context); @@ -216,7 +216,10 @@ function PMA_sendErrorReport($report) } $curl_handle = PMA_Util::configureCurl($curl_handle); curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, "POST"); - curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array('Expect:')); + curl_setopt( + $curl_handle, CURLOPT_HTTPHEADER, + array('Expect:', 'Content-Type: application/json') + ); curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $data_string); curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); $response = curl_exec($curl_handle); From 5f0aa04560e745fa43d2a5e94b07b04f98009516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 10:06:00 +0100 Subject: [PATCH 52/79] Silent errors from checking local documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The file_exists can issue error in case of open_basedir restrictions. Fixes #11940 Signed-off-by: Michal Čihař --- ChangeLog | 1 + libraries/Util.class.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 68ffc4c543..d8c5843741 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21,6 +21,7 @@ phpMyAdmin - ChangeLog - issue #11920 Can't disable backquotes in export - issue #11911 Inserts via tbl_change.php in VARBINARY columns does not allow using HEX() and MD5() - issue #11939 Correct content type for uploaded error reports +- issue #11940 Silent errors from checking local documentation 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/Util.class.php b/libraries/Util.class.php index f19ec12600..75a7dde2e8 100644 --- a/libraries/Util.class.php +++ b/libraries/Util.class.php @@ -518,7 +518,7 @@ class PMA_Util if (defined('TESTSUITE')) { /* Provide consistent URL for testsuite */ return PMA_linkURL('http://docs.phpmyadmin.net/en/latest/' . $url); - } else if (file_exists('doc/html/index.html')) { + } else if (@file_exists('doc/html/index.html')) { if (defined('PMA_SETUP')) { return '../doc/html/' . $url; } else { From 4534a90b80c725400ed6c571b72bbe719ba43e9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 10:22:21 +0100 Subject: [PATCH 53/79] Silent warnings when checking for file existance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Another occurences of file_exists which can be limited by open_basedir. Issue #11940 Signed-off-by: Michal Čihař --- index.php | 4 ++-- libraries/Config.class.php | 2 +- libraries/file_listing.lib.php | 2 +- libraries/plugins/auth/AuthenticationCookie.class.php | 4 ++-- libraries/plugins/auth/AuthenticationHttp.class.php | 2 +- libraries/plugins/auth/swekey/swekey.auth.lib.php | 4 ++-- libraries/plugins/export/ExportPdf.class.php | 2 +- libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php | 2 +- libraries/select_lang.lib.php | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/index.php b/index.php index 17b0e7aa21..526fc06e6d 100644 --- a/index.php +++ b/index.php @@ -543,7 +543,7 @@ if (! empty($_SESSION['encryption_key']) * Check for existence of config directory which should not exist in * production environment. */ -if (file_exists('config')) { +if (@file_exists('config')) { trigger_error( __( 'Directory [code]config[/code], which is used by the setup script, ' . @@ -661,7 +661,7 @@ if ($cfg['SuhosinDisableWarning'] == false * * The data file is created while creating release by ./scripts/remove-incomplete-mo */ -if (file_exists('libraries/language_stats.inc.php')) { +if (@file_exists('libraries/language_stats.inc.php')) { include 'libraries/language_stats.inc.php'; /* * This message is intentionally not translated, because we're diff --git a/libraries/Config.class.php b/libraries/Config.class.php index c3b220f9be..3691036c2a 100644 --- a/libraries/Config.class.php +++ b/libraries/Config.class.php @@ -813,7 +813,7 @@ class PMA_Config public function loadDefaults() { $cfg = array(); - if (! file_exists($this->default_source)) { + if (! @file_exists($this->default_source)) { $this->error_config_default_file = true; return false; } diff --git a/libraries/file_listing.lib.php b/libraries/file_listing.lib.php index 4e78c4623a..60b1d65ca0 100644 --- a/libraries/file_listing.lib.php +++ b/libraries/file_listing.lib.php @@ -19,7 +19,7 @@ if (! defined('PHPMYADMIN')) { */ function PMA_getDirContent($dir, $expression = '') { - if (!file_exists($dir) || !($handle = @opendir($dir))) { + if (!@file_exists($dir) || !($handle = @opendir($dir))) { return false; } diff --git a/libraries/plugins/auth/AuthenticationCookie.class.php b/libraries/plugins/auth/AuthenticationCookie.class.php index 9033c6b557..68a3e0d106 100644 --- a/libraries/plugins/auth/AuthenticationCookie.class.php +++ b/libraries/plugins/auth/AuthenticationCookie.class.php @@ -115,7 +115,7 @@ class AuthenticationCookie extends AuthenticationPlugin $header->disableMenuAndConsole(); $header->disableWarnings(); - if (file_exists(CUSTOM_HEADER_FILE)) { + if (@file_exists(CUSTOM_HEADER_FILE)) { include CUSTOM_HEADER_FILE; } echo ' @@ -263,7 +263,7 @@ class AuthenticationCookie extends AuthenticationPlugin echo ''; } echo ''; - if (file_exists(CUSTOM_FOOTER_FILE)) { + if (@file_exists(CUSTOM_FOOTER_FILE)) { include CUSTOM_FOOTER_FILE; } if (! defined('TESTSUITE')) { diff --git a/libraries/plugins/auth/AuthenticationHttp.class.php b/libraries/plugins/auth/AuthenticationHttp.class.php index 5a5a2730dc..326078d242 100644 --- a/libraries/plugins/auth/AuthenticationHttp.class.php +++ b/libraries/plugins/auth/AuthenticationHttp.class.php @@ -103,7 +103,7 @@ class AuthenticationHttp extends AuthenticationPlugin ); $response->addHTML(''); - if (file_exists(CUSTOM_FOOTER_FILE)) { + if (@file_exists(CUSTOM_FOOTER_FILE)) { include CUSTOM_FOOTER_FILE; } diff --git a/libraries/plugins/auth/swekey/swekey.auth.lib.php b/libraries/plugins/auth/swekey/swekey.auth.lib.php index 1741ca7764..c296e96173 100644 --- a/libraries/plugins/auth/swekey/swekey.auth.lib.php +++ b/libraries/plugins/auth/swekey/swekey.auth.lib.php @@ -24,7 +24,7 @@ function Swekey_Auth_check() $_SESSION['SWEKEY'] = array(); } - $_SESSION['SWEKEY']['ENABLED'] = (! empty($confFile) && file_exists($confFile)); + $_SESSION['SWEKEY']['ENABLED'] = (! empty($confFile) && @file_exists($confFile)); // Load the swekey.conf file the first time if ($_SESSION['SWEKEY']['ENABLED'] @@ -169,7 +169,7 @@ function Swekey_Auth_error() // echo "\n"; } - if (file_exists($caFile)) { + if (@file_exists($caFile)) { Swekey_SetCAFile($caFile); } elseif (! empty($caFile) && (substr($_SESSION['SWEKEY']['CONF_SERVER_CHECK'], 0, 8) == "https://") diff --git a/libraries/plugins/export/ExportPdf.class.php b/libraries/plugins/export/ExportPdf.class.php index 272004683d..07b425eb03 100644 --- a/libraries/plugins/export/ExportPdf.class.php +++ b/libraries/plugins/export/ExportPdf.class.php @@ -13,7 +13,7 @@ if (! defined('PHPMYADMIN')) { /** * Skip the plugin if TCPDF is not available. */ -if (! file_exists(TCPDF_INC)) { +if (! @file_exists(TCPDF_INC)) { $GLOBALS['skip_import'] = true; return; } diff --git a/libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php b/libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php index 9f48425a97..ef37c793aa 100644 --- a/libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php +++ b/libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php @@ -12,7 +12,7 @@ if (! defined('PHPMYADMIN')) { /** * Skip the plugin if TCPDF is not available. */ -if (! file_exists(TCPDF_INC)) { +if (! @file_exists(TCPDF_INC)) { $GLOBALS['skip_import'] = true; return; } diff --git a/libraries/select_lang.lib.php b/libraries/select_lang.lib.php index da8556c553..cb99ec53d2 100644 --- a/libraries/select_lang.lib.php +++ b/libraries/select_lang.lib.php @@ -454,7 +454,7 @@ function PMA_langList() $path = $GLOBALS['lang_path'] . '/' . $file . '/LC_MESSAGES/phpmyadmin.mo'; if ($file != "." && $file != ".." - && file_exists($path) + && @file_exists($path) ) { $result[$file] = PMA_langDetails($file); } From b3a1a0c1f0edb438b3f1df12d09620180e18b4bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 11:13:07 +0100 Subject: [PATCH 54/79] Use PATH_SEPARATOR for determining path separator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes error on servers with disabled php_uname Fixes #11944 Signed-off-by: Michal Čihař --- ChangeLog | 1 + libraries/php-gettext/gettext.inc | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index d8c5843741..2e69ec29bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,6 +22,7 @@ phpMyAdmin - ChangeLog - issue #11911 Inserts via tbl_change.php in VARBINARY columns does not allow using HEX() and MD5() - issue #11939 Correct content type for uploaded error reports - issue #11940 Silent errors from checking local documentation +- issue #11944 Fixed error on servers with disabled php_uname 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/php-gettext/gettext.inc b/libraries/php-gettext/gettext.inc index 74e0be9940..75e2112182 100644 --- a/libraries/php-gettext/gettext.inc +++ b/libraries/php-gettext/gettext.inc @@ -244,7 +244,7 @@ function _setlocale($category, $locale) { function _bindtextdomain($domain, $path) { global $text_domains; // ensure $path ends with a slash ('/' should work for both, but lets still play nice) - if (substr(php_uname(), 0, 7) == "Windows") { + if (PATH_SEPARATOR == '\\') { if ($path[strlen($path)-1] != '\\' and $path[strlen($path)-1] != '/') $path .= '\\'; } else { From 40edb83b3cdc1d018bda9215fad7009362c456d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 11:52:03 +0100 Subject: [PATCH 55/79] Correctly store and report file upload errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #11946 Signed-off-by: Michal Čihař --- ChangeLog | 1 + tbl_replace.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 2e69ec29bf..566c546e16 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23,6 +23,7 @@ phpMyAdmin - ChangeLog - issue #11939 Correct content type for uploaded error reports - issue #11940 Silent errors from checking local documentation - issue #11944 Fixed error on servers with disabled php_uname +- issue #11946 Correctly store and report file upload errors 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/tbl_replace.php b/tbl_replace.php index a81f9ccb02..217652ffc7 100644 --- a/tbl_replace.php +++ b/tbl_replace.php @@ -247,7 +247,7 @@ foreach ($loop_array as $rownumber => $where_clause) { } if ($file_to_insert->isError()) { - $message .= $file_to_insert->getError(); + $insert_errors[] = $file_to_insert->getError(); } // delete $file_to_insert temporary variable $file_to_insert->cleanUp(); From 8fcc943b7e7aa68d621d1c566c1c7239d9c2d579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 12:19:26 +0100 Subject: [PATCH 56/79] Avoid javascript errors on invalid location hash MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #11948 Signed-off-by: Michal Čihař --- ChangeLog | 1 + js/config.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 566c546e16..0cdc9e6bd6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -24,6 +24,7 @@ phpMyAdmin - ChangeLog - issue #11940 Silent errors from checking local documentation - issue #11944 Fixed error on servers with disabled php_uname - issue #11946 Correctly store and report file upload errors +- issue #11948 Avoid javascript errors on invalid location hash 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/js/config.js b/js/config.js index 61e4481296..d3d5d71f23 100644 --- a/js/config.js +++ b/js/config.js @@ -600,7 +600,7 @@ AJAX.registerOnload('config.js', function () { var tab_check_fnc = function () { if (location.hash != prev_hash) { prev_hash = location.hash; - if (location.hash.match(/^#tab_.+/) && $('#' + location.hash.substr(5)).length) { + if (location.hash.match(/^#tab_[a-zA-Z0-9_]+/) && $('#' + location.hash.substr(5)).length) { setTab(location.hash.substr(5)); } } From e50a445d17525a8f04e57241a58f3517d1abaa86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 12:43:30 +0100 Subject: [PATCH 57/79] Define is_ajax_request earlier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes PHP warning on configuration errors. Fixes #11950 Signed-off-by: Michal Čihař --- ChangeLog | 1 + libraries/common.inc.php | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0cdc9e6bd6..5a6cc33667 100644 --- a/ChangeLog +++ b/ChangeLog @@ -25,6 +25,7 @@ phpMyAdmin - ChangeLog - issue #11944 Fixed error on servers with disabled php_uname - issue #11946 Correctly store and report file upload errors - issue #11948 Avoid javascript errors on invalid location hash +- issue #11950 Fix PHP warning on configuration errors 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/common.inc.php b/libraries/common.inc.php index 773e8a3200..c12a04c639 100644 --- a/libraries/common.inc.php +++ b/libraries/common.inc.php @@ -207,6 +207,20 @@ foreach (get_defined_vars() as $key => $value) { } unset($key, $value, $variables_whitelist); +/** + * @global boolean $GLOBALS['is_ajax_request'] + * @todo should this be moved to the variables init section above? + * + * Check if the current request is an AJAX request, and set is_ajax_request + * accordingly. Suppress headers, footers and unnecessary output if set to + * true + */ +if (isset($_REQUEST['ajax_request']) && $_REQUEST['ajax_request'] == true) { + $GLOBALS['is_ajax_request'] = true; +} else { + $GLOBALS['is_ajax_request'] = false; +} + /** * Subforms - some functions need to be called by form, cause of the limited URL @@ -1175,20 +1189,6 @@ $GLOBALS['PMA_Config']->set('default_server', ''); /* Tell tracker that it can actually work */ PMA_Tracker::enable(); -/** - * @global boolean $GLOBALS['is_ajax_request'] - * @todo should this be moved to the variables init section above? - * - * Check if the current request is an AJAX request, and set is_ajax_request - * accordingly. Suppress headers, footers and unnecessary output if set to - * true - */ -if (isset($_REQUEST['ajax_request']) && $_REQUEST['ajax_request'] == true) { - $GLOBALS['is_ajax_request'] = true; -} else { - $GLOBALS['is_ajax_request'] = false; -} - if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) { PMA_fatalError(__("GLOBALS overwrite attempt")); } From 53b1f9adcc5882838161d3aa6289d93385053fbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 13:24:39 +0100 Subject: [PATCH 58/79] Silent errors on checking for files and folders MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #11951 Fixes #11952 Signed-off-by: Michal Čihař --- ChangeLog | 2 ++ changelog.php | 2 +- import.php | 2 +- libraries/Config.class.php | 4 ++-- libraries/File.class.php | 7 ++----- libraries/export.lib.php | 2 +- libraries/file_listing.lib.php | 2 +- libraries/plugins/import/ImportShp.class.php | 2 +- license.php | 2 +- prefs_manage.php | 2 +- setup/lib/index.lib.php | 6 +++--- 11 files changed, 16 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5a6cc33667..84c30901b8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -26,6 +26,8 @@ phpMyAdmin - ChangeLog - issue #11946 Correctly store and report file upload errors - issue #11948 Avoid javascript errors on invalid location hash - issue #11950 Fix PHP warning on configuration errors +- issue #11951 Silent errors on checking for writable folders +- issue #11952 Silent warning on invalid file upload 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/changelog.php b/changelog.php index 6dbd495059..2fb7646bc3 100644 --- a/changelog.php +++ b/changelog.php @@ -20,7 +20,7 @@ $filename = CHANGELOG_FILE; * Read changelog. */ // Check if the file is available, some distributions remove these. -if (is_readable($filename)) { +if (@is_readable($filename)) { // Test if the if is in a compressed format if (substr($filename, -3) == '.gz') { diff --git a/import.php b/import.php index aebba6c937..24ea907838 100644 --- a/import.php +++ b/import.php @@ -450,7 +450,7 @@ if ($import_file != 'none' && ! $error) { $tmp_subdir = sys_get_temp_dir(); } $tmp_subdir = rtrim($tmp_subdir, DIRECTORY_SEPARATOR); - if (is_writable($tmp_subdir)) { + if (@is_writable($tmp_subdir)) { $import_file_new = $tmp_subdir . DIRECTORY_SEPARATOR . basename($import_file) . uniqid(); if (move_uploaded_file($import_file, $import_file_new)) { diff --git a/libraries/Config.class.php b/libraries/Config.class.php index 3691036c2a..07af3b60a6 100644 --- a/libraries/Config.class.php +++ b/libraries/Config.class.php @@ -1166,12 +1166,12 @@ class PMA_Config return false; } - if (! file_exists($this->getSource())) { + if (! @file_exists($this->getSource())) { $this->source_mtime = 0; return false; } - if (! is_readable($this->getSource())) { + if (! @is_readable($this->getSource())) { // manually check if file is readable // might be bug #3059806 Supporting running from CIFS/Samba shares diff --git a/libraries/File.class.php b/libraries/File.class.php index 1929f9603e..8c790378b3 100644 --- a/libraries/File.class.php +++ b/libraries/File.class.php @@ -441,10 +441,7 @@ class PMA_File { // suppress warnings from being displayed, but not from being logged // any file access outside of open_basedir will issue a warning - ob_start(); - $is_readable = is_readable($this->getName()); - ob_end_clean(); - return $is_readable; + return @is_readable($this->getName()); } /** @@ -463,7 +460,7 @@ class PMA_File } if (empty($GLOBALS['cfg']['TempDir']) - || ! is_writable($GLOBALS['cfg']['TempDir']) + || ! @is_writable($GLOBALS['cfg']['TempDir']) ) { // cannot create directory or access, point user to FAQ 1.11 $this->_error_message = __( diff --git a/libraries/export.lib.php b/libraries/export.lib.php index e7ebb13392..be0b05612e 100644 --- a/libraries/export.lib.php +++ b/libraries/export.lib.php @@ -339,7 +339,7 @@ function PMA_openExportFile($filename, $quick_export) ) ); $message->addParam($save_filename); - } elseif (is_file($save_filename) && ! is_writable($save_filename)) { + } elseif (is_file($save_filename) && ! @is_writable($save_filename)) { $message = PMA_Message::error( __( 'The web server does not have permission ' diff --git a/libraries/file_listing.lib.php b/libraries/file_listing.lib.php index 60b1d65ca0..6974bed11d 100644 --- a/libraries/file_listing.lib.php +++ b/libraries/file_listing.lib.php @@ -28,7 +28,7 @@ function PMA_getDirContent($dir, $expression = '') $dir .= '/'; } while ($file = @readdir($handle)) { - if (is_file($dir . $file) + if (@is_file($dir . $file) && ($expression == '' || preg_match($expression, $file)) ) { $result[] = $file; diff --git a/libraries/plugins/import/ImportShp.class.php b/libraries/plugins/import/ImportShp.class.php index 4149105347..6a0384989c 100644 --- a/libraries/plugins/import/ImportShp.class.php +++ b/libraries/plugins/import/ImportShp.class.php @@ -88,7 +88,7 @@ class ImportShp extends ImportPlugin // and use the files in it for import if ($compression == 'application/zip' && ! empty($GLOBALS['cfg']['TempDir']) - && is_writable($GLOBALS['cfg']['TempDir']) + && @is_writable($GLOBALS['cfg']['TempDir']) ) { $dbf_file_name = PMA_findFileFromZipArchive( '/^.*\.dbf$/i', $import_file diff --git a/license.php b/license.php index 7348af874f..62f3a15d48 100644 --- a/license.php +++ b/license.php @@ -22,7 +22,7 @@ header('Content-type: text/plain; charset=utf-8'); $filename = LICENSE_FILE; // Check if the file is available, some distributions remove these. -if (is_readable($filename)) { +if (@is_readable($filename)) { readfile($filename); } else { printf( diff --git a/prefs_manage.php b/prefs_manage.php index a6b2bcdd9b..de1d0341e7 100644 --- a/prefs_manage.php +++ b/prefs_manage.php @@ -58,7 +58,7 @@ if (isset($_POST['submit_export']) // directory if (!empty($open_basedir)) { $tmp_subdir = (PMA_IS_WINDOWS ? '.\\tmp\\' : 'tmp/'); - if (is_writable($tmp_subdir)) { + if (@is_writable($tmp_subdir)) { $import_file_new = tempnam($tmp_subdir, 'prefs'); if (move_uploaded_file($import_file, $import_file_new)) { $import_file = $import_file_new; diff --git a/setup/lib/index.lib.php b/setup/lib/index.lib.php index ac07d27db9..eb81fe75ad 100644 --- a/setup/lib/index.lib.php +++ b/setup/lib/index.lib.php @@ -199,13 +199,13 @@ function PMA_checkConfigRw(&$is_readable, &$is_writable, &$file_exists) $file_path = $GLOBALS['ConfigFile']->getFilePath(); $file_dir = dirname($file_path); $is_readable = true; - $is_writable = is_dir($file_dir); + $is_writable = @is_dir($file_dir); if (SETUP_DIR_WRITABLE) { - $is_writable = $is_writable && is_writable($file_dir); + $is_writable = $is_writable && @is_writable($file_dir); } $file_exists = file_exists($file_path); if ($file_exists) { $is_readable = is_readable($file_path); - $is_writable = $is_writable && is_writable($file_path); + $is_writable = $is_writable && @is_writable($file_path); } } From aebd3e11d96cb9a853b53bbfedc36a19c97046a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 13:55:43 +0100 Subject: [PATCH 59/79] Use PATH_SEPARATOR instead of own one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- libraries/Error.class.php | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/libraries/Error.class.php b/libraries/Error.class.php index fddeceb874..35c9a53adc 100644 --- a/libraries/Error.class.php +++ b/libraries/Error.class.php @@ -433,32 +433,26 @@ class PMA_Error extends PMA_Message { $dest = realpath($dest); - if (substr(PHP_OS, 0, 3) == 'WIN') { - $separator = '\\'; - } else { - $separator = '/'; - } - $Ahere = explode( - $separator, - realpath(__DIR__ . $separator . '..') + PATH_SEPARATOR, + realpath(__DIR__ . PATH_SEPARATOR . '..') ); - $Adest = explode($separator, $dest); + $Adest = explode(PATH_SEPARATOR, $dest); $result = '.'; // && count ($Adest)>0 && count($Ahere)>0 ) - while (implode($separator, $Adest) != implode($separator, $Ahere)) { + while (implode(PATH_SEPARATOR, $Adest) != implode(PATH_SEPARATOR, $Ahere)) { if (count($Ahere) > count($Adest)) { array_pop($Ahere); - $result .= $separator . '..'; + $result .= PATH_SEPARATOR . '..'; } else { array_pop($Adest); } } - $path = $result . str_replace(implode($separator, $Adest), '', $dest); + $path = $result . str_replace(implode(PATH_SEPARATOR, $Adest), '', $dest); return str_replace( - $separator . $separator, - $separator, + PATH_SEPARATOR . PATH_SEPARATOR, + PATH_SEPARATOR, $path ); } From 387331ff34cde974633ee64b3e380c10cfdf7e47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 13:58:44 +0100 Subject: [PATCH 60/79] Do not fail getting filename with open_basedir limitations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The realpath() can also return FALSE, handle it gracefully. Fixes #11953 Signed-off-by: Michal Čihař --- ChangeLog | 1 + libraries/Error.class.php | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 84c30901b8..46c3bc67ef 100644 --- a/ChangeLog +++ b/ChangeLog @@ -28,6 +28,7 @@ phpMyAdmin - ChangeLog - issue #11950 Fix PHP warning on configuration errors - issue #11951 Silent errors on checking for writable folders - issue #11952 Silent warning on invalid file upload +- issue #11953 Do not fail getting filename with open_basedir limitations 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/Error.class.php b/libraries/Error.class.php index 35c9a53adc..d9e10cea69 100644 --- a/libraries/Error.class.php +++ b/libraries/Error.class.php @@ -431,7 +431,12 @@ class PMA_Error extends PMA_Message */ public static function relPath($dest) { - $dest = realpath($dest); + $dest = @realpath($dest); + + /* Probably affected by open_basedir */ + if ($dest === FALSE) { + return $dest; + } $Ahere = explode( PATH_SEPARATOR, From 38aba0406f84dde976856a990d9222384064a6cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 14:15:56 +0100 Subject: [PATCH 61/79] Use DIRECTORY_SEPARATOR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The PATH_SEPARATOR is not the right variable... Issue #11944 Signed-off-by: Michal Čihař --- libraries/Error.class.php | 16 ++++++++-------- libraries/php-gettext/gettext.inc | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/libraries/Error.class.php b/libraries/Error.class.php index d9e10cea69..e8d04ed0e9 100644 --- a/libraries/Error.class.php +++ b/libraries/Error.class.php @@ -439,25 +439,25 @@ class PMA_Error extends PMA_Message } $Ahere = explode( - PATH_SEPARATOR, - realpath(__DIR__ . PATH_SEPARATOR . '..') + DIRECTORY_SEPARATOR, + realpath(__DIR__ . DIRECTORY_SEPARATOR . '..') ); - $Adest = explode(PATH_SEPARATOR, $dest); + $Adest = explode(DIRECTORY_SEPARATOR, $dest); $result = '.'; // && count ($Adest)>0 && count($Ahere)>0 ) - while (implode(PATH_SEPARATOR, $Adest) != implode(PATH_SEPARATOR, $Ahere)) { + while (implode(DIRECTORY_SEPARATOR, $Adest) != implode(DIRECTORY_SEPARATOR, $Ahere)) { if (count($Ahere) > count($Adest)) { array_pop($Ahere); - $result .= PATH_SEPARATOR . '..'; + $result .= DIRECTORY_SEPARATOR . '..'; } else { array_pop($Adest); } } - $path = $result . str_replace(implode(PATH_SEPARATOR, $Adest), '', $dest); + $path = $result . str_replace(implode(DIRECTORY_SEPARATOR, $Adest), '', $dest); return str_replace( - PATH_SEPARATOR . PATH_SEPARATOR, - PATH_SEPARATOR, + DIRECTORY_SEPARATOR . PATH_SEPARATOR, + DIRECTORY_SEPARATOR, $path ); } diff --git a/libraries/php-gettext/gettext.inc b/libraries/php-gettext/gettext.inc index 75e2112182..908180d239 100644 --- a/libraries/php-gettext/gettext.inc +++ b/libraries/php-gettext/gettext.inc @@ -244,7 +244,7 @@ function _setlocale($category, $locale) { function _bindtextdomain($domain, $path) { global $text_domains; // ensure $path ends with a slash ('/' should work for both, but lets still play nice) - if (PATH_SEPARATOR == '\\') { + if (DIRECTORY_SEPARATOR == '\\') { if ($path[strlen($path)-1] != '\\' and $path[strlen($path)-1] != '/') $path .= '\\'; } else { From 9d1a5997cb6c2c9a6a2594fce6190fb63c74f53b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 14:16:43 +0100 Subject: [PATCH 62/79] Correctly handle failing case MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue #11953 Signed-off-by: Michal Čihař --- libraries/Error.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/Error.class.php b/libraries/Error.class.php index e8d04ed0e9..089cdbf667 100644 --- a/libraries/Error.class.php +++ b/libraries/Error.class.php @@ -425,17 +425,17 @@ class PMA_Error extends PMA_Message * prevent path disclosure in error message, * and make users feel safe to submit error reports * - * @param string $dest path to be shorten + * @param string $path path to be shorten * * @return string shortened path */ - public static function relPath($dest) + public static function relPath($path) { - $dest = @realpath($dest); + $dest = @realpath($path); /* Probably affected by open_basedir */ if ($dest === FALSE) { - return $dest; + return $path; } $Ahere = explode( From 2b3ef7ad99ff2a53a239423cb0485b8b624fdb06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 14:19:59 +0100 Subject: [PATCH 63/79] Improve test coverage for getting relative path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- test/classes/PMA_Error_test.php | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/test/classes/PMA_Error_test.php b/test/classes/PMA_Error_test.php index 2c5d0c1184..6fa0ad21c7 100644 --- a/test/classes/PMA_Error_test.php +++ b/test/classes/PMA_Error_test.php @@ -82,15 +82,26 @@ class PMA_Error_Test extends PHPUnit_Framework_TestCase * Test for setFile * * @return void + * + * @dataProvider filePathProvider */ - public function testSetFile() + public function testSetFile($file, $expected) { - $this->object->setFile('./pma.txt'); - $this->assertStringStartsWith( - implode( - DIRECTORY_SEPARATOR, - array('.', '..', '..') - ), $this->object->getFile() + $this->object->setFile($file); + $this->assertEquals($expected, $this->object->getFile()); + } + + /** + * Data provider for setFile + * + * @return array + */ + public function filePathProvider() + { + return array( + array('./ChangeLog', './ChangeLog'), + array(__FILE__, './test/classes/PMA_Error_test.php'), + array('./NONEXISTING', './NONEXISTING'), ); } From 073b85e1ee029aa5974e174cabc6e49f097fb40d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 15:43:42 +0100 Subject: [PATCH 64/79] Avoid matching of date MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This causes random failures as time can be one second further when generating output. Signed-off-by: Michal Čihař --- test/libraries/PMA_ConfigGenerator_test.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/test/libraries/PMA_ConfigGenerator_test.php b/test/libraries/PMA_ConfigGenerator_test.php index 63ae7d2b5b..1d0d2f1959 100644 --- a/test/libraries/PMA_ConfigGenerator_test.php +++ b/test/libraries/PMA_ConfigGenerator_test.php @@ -45,8 +45,6 @@ class PMA_ConfigGenerator_Test extends PHPUnit_Framework_TestCase $cf->setPersistKeys(array("1/", 2)); - /* TODO: This is sometimes one second off... */ - $date = date(DATE_RFC1123); $result = ConfigGenerator::getConfigFile($cf); $this->assertContains( @@ -54,9 +52,7 @@ class PMA_ConfigGenerator_Test extends PHPUnit_Framework_TestCase "/*\n" . " * Generated configuration file\n" . " * Generated by: phpMyAdmin " . - $GLOBALS['PMA_Config']->get('PMA_VERSION') . " setup script\n" . - " * Date: " . $date . "\n" . - " */\n\n", + $GLOBALS['PMA_Config']->get('PMA_VERSION') . " setup script\n", $result ); From 3bacb683059c9c9afe21e08204b89d741450566a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 12 Feb 2016 15:53:02 +0100 Subject: [PATCH 65/79] Make sure format is always defined MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #11955 Signed-off-by: Michal Čihař --- import.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/import.php b/import.php index 24ea907838..9f2bb68d6f 100644 --- a/import.php +++ b/import.php @@ -64,6 +64,8 @@ if (isset($_REQUEST['console_bookmark_add'])) { } } +$format = ''; + /** * Sets globals from $_POST */ From 85dd699364521ebdfadd116b2c6970602ae3346a Mon Sep 17 00:00:00 2001 From: Dan Ungureanu Date: Fri, 12 Feb 2016 23:45:41 +0200 Subject: [PATCH 66/79] Updated sql-parser to phpmyadmin/sql-parser@66b528dc0f3aa81c726bf928c01377ba9b048df0 (v3.3.1). Fixes #11956. unrecognized keyword interval Fixes issues regarding field names and aliases. Signed-off-by: Dan Ungureanu --- ChangeLog | 2 + .../src/Components/AlterOperation.php | 4 +- .../sql-parser/src/Components/Condition.php | 1 + .../src/Components/CreateDefinition.php | 2 +- .../sql-parser/src/Components/Expression.php | 75 ++++++++++++++----- .../sql-parser/src/Components/IntoKeyword.php | 5 +- .../sql-parser/src/Components/JoinKeyword.php | 2 +- .../src/Components/PartitionDefinition.php | 4 +- .../sql-parser/src/Components/Reference.php | 5 +- .../src/Components/RenameOperation.php | 10 +-- .../src/Components/SetOperation.php | 2 +- libraries/sql-parser/src/Parser.php | 24 +++--- .../src/Statements/AlterStatement.php | 4 +- .../src/Statements/CreateStatement.php | 10 +-- 14 files changed, 92 insertions(+), 58 deletions(-) diff --git a/ChangeLog b/ChangeLog index 46c3bc67ef..e9da26605f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -29,6 +29,8 @@ phpMyAdmin - ChangeLog - issue #11951 Silent errors on checking for writable folders - issue #11952 Silent warning on invalid file upload - issue #11953 Do not fail getting filename with open_basedir limitations +- issue #11956 unrecognized keyword interval +- issue Field names and aliases are being correctly parsed now. 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/sql-parser/src/Components/AlterOperation.php b/libraries/sql-parser/src/Components/AlterOperation.php index 8dad8e888e..d0b09f18bd 100644 --- a/libraries/sql-parser/src/Components/AlterOperation.php +++ b/libraries/sql-parser/src/Components/AlterOperation.php @@ -172,8 +172,8 @@ class AlterOperation extends Component $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, + 'breakOnAlias' => true, + 'parseField' => 'column', ) ); if ($ret->field === null) { diff --git a/libraries/sql-parser/src/Components/Condition.php b/libraries/sql-parser/src/Components/Condition.php index f820c93439..f3179ead44 100644 --- a/libraries/sql-parser/src/Components/Condition.php +++ b/libraries/sql-parser/src/Components/Condition.php @@ -43,6 +43,7 @@ class Condition extends Component 'EXISTS' => 1, 'IF' => 1, 'IN' => 1, + 'INTERVAL' => 1, 'IS' => 1, 'LIKE' => 1, 'MATCH' => 1, diff --git a/libraries/sql-parser/src/Components/CreateDefinition.php b/libraries/sql-parser/src/Components/CreateDefinition.php index 66ea4b2116..13e5e83a59 100644 --- a/libraries/sql-parser/src/Components/CreateDefinition.php +++ b/libraries/sql-parser/src/Components/CreateDefinition.php @@ -55,7 +55,7 @@ class CreateDefinition extends Component // Generated columns options. 'GENERATED ALWAYS' => 8, - 'AS' => array(9, 'expr', array('bracketsDelimited' => true)), + 'AS' => array(9, 'expr', array('parenthesesDelimited' => true)), 'VIRTUAL' => 10, 'PERSISTENT' => 11, 'STORED' => 11, diff --git a/libraries/sql-parser/src/Components/Expression.php b/libraries/sql-parser/src/Components/Expression.php index a365d321a1..f6d3895479 100644 --- a/libraries/sql-parser/src/Components/Expression.php +++ b/libraries/sql-parser/src/Components/Expression.php @@ -119,6 +119,31 @@ class Expression extends Component } /** + * Possible options: + * + * `field` + * + * First field to be filled. + * If this is not specified, it takes the value of `parseField`. + * + * `parseField` + * + * Specifies the type of the field parsed. It may be `database`, + * `table` or `column`. These expressions may not include + * parentheses. + * + * `breakOnAlias` + * + * If not empty, breaks when the alias occurs (it is not included). + * + * `breakOnParentheses` + * + * If not empty, breaks when the first parentheses occurs. + * + * `parenthesesDelimited` + * + * If not empty, breaks after last parentheses occurred. + * * @param Parser $parser The parser that serves as context. * @param TokensList $list The list of tokens that are being parsed. * @param array $options Parameters for parsing. @@ -164,6 +189,12 @@ class Expression extends Component */ $prev = array(null, null); + // When a field is parsed, no parentheses are expected. + if (!empty($options['parseField'])) { + $options['breakOnParentheses'] = true; + $options['field'] = $options['parseField']; + } + for (; $list->idx < $list->count; ++$list->idx) { /** @@ -195,7 +226,9 @@ class Expression extends Component // A `(` was previously found and this keyword is the // beginning of a statement, so this is a subquery. $ret->subquery = $token->value; - } elseif ($token->flags & Token::FLAG_KEYWORD_FUNCTION) { + } elseif (($token->flags & Token::FLAG_KEYWORD_FUNCTION) + && (empty($options['parseField'])) + ) { $isExpr = true; } elseif (($token->flags & Token::FLAG_KEYWORD_RESERVED) && ($brackets === 0) @@ -207,7 +240,7 @@ class Expression extends Component break; } if ($token->value === 'AS') { - if (!empty($options['noAlias'])) { + if (!empty($options['breakOnAlias'])) { break; } if (!empty($ret->alias)) { @@ -224,8 +257,24 @@ class Expression extends Component } } + if (($token->type === Token::TYPE_NUMBER) + || ($token->type === Token::TYPE_BOOL) + || (($token->type === Token::TYPE_SYMBOL) + && ($token->flags & Token::FLAG_SYMBOL_VARIABLE)) + || (($token->type === Token::TYPE_OPERATOR) + && ($token->value !== '.')) + ) { + if (!empty($options['parseField'])) { + break; + } + + // Numbers, booleans and operators (except dot) are usually part + // of expressions. + $isExpr = true; + } + if ($token->type === Token::TYPE_OPERATOR) { - if ((!empty($options['noBrackets'])) + if ((!empty($options['breakOnParentheses'])) && (($token->value === '(') || ($token->value === ')')) ) { // No brackets were expected. @@ -244,7 +293,7 @@ class Expression extends Component } elseif ($token->value === ')') { --$brackets; if ($brackets === 0) { - if (!empty($options['bracketsDelimited'])) { + if (!empty($options['parenthesesDelimited'])) { // The current token is the last bracket, the next // one will be outside the expression. $ret->expr .= $token->token; @@ -264,19 +313,7 @@ class Expression extends Component } } - if (($token->type === Token::TYPE_NUMBER) - || ($token->type === Token::TYPE_BOOL) - || (($token->type === Token::TYPE_SYMBOL) - && ($token->flags & Token::FLAG_SYMBOL_VARIABLE)) - || (($token->type === Token::TYPE_OPERATOR) - && ($token->value !== '.')) - ) { - // Numbers, booleans and operators (except dot) are usually part - // of expressions. - $isExpr = true; - } - - // Saving the previous token. + // Saving the previous tokens. $prev[0] = $prev[1]; $prev[1] = $token; @@ -323,14 +360,14 @@ class Expression extends Component $dot = true; $ret->expr .= $token->token; } else { - $field = (!empty($options['skipColumn'])) ? 'table' : 'column'; + $field = empty($options['field']) ? 'column' : $options['field']; if (empty($ret->$field)) { $ret->$field = $token->value; $ret->expr .= $token->token; $dot = false; } else { // No alias is expected. - if (!empty($options['noAlias'])) { + if (!empty($options['breakOnAlias'])) { break; } if (!empty($ret->alias)) { diff --git a/libraries/sql-parser/src/Components/IntoKeyword.php b/libraries/sql-parser/src/Components/IntoKeyword.php index 1ac7be82e9..56f349feb6 100644 --- a/libraries/sql-parser/src/Components/IntoKeyword.php +++ b/libraries/sql-parser/src/Components/IntoKeyword.php @@ -107,9 +107,8 @@ class IntoKeyword extends Component $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, - 'skipColumn' => true, + 'parseField' => 'table', + 'breakOnAlias' => true, ) ); $state = 1; diff --git a/libraries/sql-parser/src/Components/JoinKeyword.php b/libraries/sql-parser/src/Components/JoinKeyword.php index 224e802736..d8e6ee916b 100644 --- a/libraries/sql-parser/src/Components/JoinKeyword.php +++ b/libraries/sql-parser/src/Components/JoinKeyword.php @@ -128,7 +128,7 @@ class JoinKeyword extends Component break; } } elseif ($state === 1) { - $expr->expr = Expression::parse($parser, $list, array('skipColumn' => true)); + $expr->expr = Expression::parse($parser, $list, array('field' => 'table')); $state = 2; } elseif ($state === 2) { if (($token->type === Token::TYPE_KEYWORD) && ($token->value === 'ON')) { diff --git a/libraries/sql-parser/src/Components/PartitionDefinition.php b/libraries/sql-parser/src/Components/PartitionDefinition.php index 8c54e22f83..06dc5fc0d8 100644 --- a/libraries/sql-parser/src/Components/PartitionDefinition.php +++ b/libraries/sql-parser/src/Components/PartitionDefinition.php @@ -169,8 +169,8 @@ class PartitionDefinition extends Component $parser, $list, array( - 'bracketsDelimited' => true, - 'noAlias' => true, + 'parenthesesDelimited' => true, + 'breakOnAlias' => true, ) ); } diff --git a/libraries/sql-parser/src/Components/Reference.php b/libraries/sql-parser/src/Components/Reference.php index 7dce16672f..7acd92e042 100644 --- a/libraries/sql-parser/src/Components/Reference.php +++ b/libraries/sql-parser/src/Components/Reference.php @@ -121,9 +121,8 @@ class Reference extends Component $parser, $list, array( - 'noAlias' => true, - 'skipColumn' => true, - 'noBrackets' => true, + 'parseField' => 'table', + 'breakOnAlias' => true, ) ); $state = 1; diff --git a/libraries/sql-parser/src/Components/RenameOperation.php b/libraries/sql-parser/src/Components/RenameOperation.php index 8776963ea5..c0ecf6c01b 100644 --- a/libraries/sql-parser/src/Components/RenameOperation.php +++ b/libraries/sql-parser/src/Components/RenameOperation.php @@ -93,9 +93,8 @@ class RenameOperation extends Component $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, - 'skipColumn' => true, + 'breakOnAlias' => true, + 'parseField' => 'table', ) ); if (empty($expr->old)) { @@ -120,9 +119,8 @@ class RenameOperation extends Component $parser, $list, array( - 'noBrackets' => true, - 'skipColumn' => true, - 'noAlias' => true, + 'breakOnAlias' => true, + 'parseField' => 'table', ) ); if (empty($expr->new)) { diff --git a/libraries/sql-parser/src/Components/SetOperation.php b/libraries/sql-parser/src/Components/SetOperation.php index 38aa7f6262..9306d43995 100644 --- a/libraries/sql-parser/src/Components/SetOperation.php +++ b/libraries/sql-parser/src/Components/SetOperation.php @@ -100,7 +100,7 @@ class SetOperation extends Component $parser, $list, array( - 'noAlias' => true, + 'breakOnAlias' => true, ) ); if ($tmp == null) { diff --git a/libraries/sql-parser/src/Parser.php b/libraries/sql-parser/src/Parser.php index 2aca938a21..e878570b19 100644 --- a/libraries/sql-parser/src/Parser.php +++ b/libraries/sql-parser/src/Parser.php @@ -125,17 +125,17 @@ class Parser 'ALTER' => array( 'class' => 'SqlParser\\Components\\Expression', 'field' => 'table', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'ANALYZE' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'BACKUP' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'CALL' => array( 'class' => 'SqlParser\\Components\\FunctionCall', @@ -144,22 +144,22 @@ class Parser 'CHECK' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'CHECKSUM' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'DROP' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'fields', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'FROM' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'from', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'GROUP BY' => array( 'class' => 'SqlParser\\Components\\OrderKeyword', @@ -212,7 +212,7 @@ class Parser 'OPTIMIZE' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'ORDER BY' => array( 'class' => 'SqlParser\\Components\\OrderKeyword', @@ -233,12 +233,12 @@ class Parser 'REPAIR' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'RESTORE' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'SET' => array( 'class' => 'SqlParser\\Components\\SetOperation', @@ -251,12 +251,12 @@ class Parser 'TRUNCATE' => array( 'class' => 'SqlParser\\Components\\Expression', 'field' => 'table', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'UPDATE' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'VALUE' => array( 'class' => 'SqlParser\\Components\\Array2d', diff --git a/libraries/sql-parser/src/Statements/AlterStatement.php b/libraries/sql-parser/src/Statements/AlterStatement.php index 275eae7011..c8786bd603 100644 --- a/libraries/sql-parser/src/Statements/AlterStatement.php +++ b/libraries/sql-parser/src/Statements/AlterStatement.php @@ -76,8 +76,8 @@ class AlterStatement extends Statement $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, + 'parseField' => 'column', + 'breakOnAlias' => true, ) ); ++$list->idx; // Skipping field. diff --git a/libraries/sql-parser/src/Statements/CreateStatement.php b/libraries/sql-parser/src/Statements/CreateStatement.php index fe6693bf9d..d5e23ad421 100644 --- a/libraries/sql-parser/src/Statements/CreateStatement.php +++ b/libraries/sql-parser/src/Statements/CreateStatement.php @@ -342,9 +342,8 @@ class CreateStatement extends Statement $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, - 'skipColumn' => true, + 'parseField' => 'table', + 'breakOnAlias' => true, ) ); @@ -538,9 +537,8 @@ class CreateStatement extends Statement $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, - 'skipColumn' => true, + 'parseField' => 'table', + 'breakOnAlias' => true, ) ); ++$list->idx; From 9204b85fa54dede121b4ab8b37f7d4fed057cf14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Mon, 15 Feb 2016 08:50:53 +0100 Subject: [PATCH 67/79] Move isStorageSupported to config.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This way it's included in the setup as well where it's used. Fixes #11959 Signed-off-by: Michal Čihař --- ChangeLog | 1 + js/config.js | 24 ++++++++++++++++++++++++ js/functions.js | 24 ------------------------ libraries/Header.class.php | 2 +- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index e9da26605f..29f34173b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -31,6 +31,7 @@ phpMyAdmin - ChangeLog - issue #11953 Do not fail getting filename with open_basedir limitations - issue #11956 unrecognized keyword interval - issue Field names and aliases are being correctly parsed now. +- issue #11959 Fix javascript error in setup 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/js/config.js b/js/config.js index d3d5d71f23..43309b1b93 100644 --- a/js/config.js +++ b/js/config.js @@ -3,6 +3,30 @@ * Functions used in configuration forms and on user preferences pages */ +/** + * checks whether browser supports web storage + * + * @param type the type of storage i.e. localStorage or sessionStorage + * + * @returns bool + */ +function isStorageSupported(type) +{ + try { + window[type].setItem('PMATest', 'test'); + // Check whether key-value pair was set successfully + if (window[type].getItem('PMATest') === 'test') { + // Supported, remove test variable from storage + window[type].removeItem('PMATest'); + return true; + } + } catch(error) { + // Not supported + PMA_ajaxShowMessage(PMA_messages.strNoLocalStorage, false); + } + return false; +} + /** * Unbind all event handlers before tearing down a page */ diff --git a/js/functions.js b/js/functions.js index 78bbff68d4..52c959d01f 100644 --- a/js/functions.js +++ b/js/functions.js @@ -4746,30 +4746,6 @@ function PMA_ignorePhpErrors(clearPrevErrors){ $pmaErrors.remove(); } -/** - * checks whether browser supports web storage - * - * @param type the type of storage i.e. localStorage or sessionStorage - * - * @returns bool - */ -function isStorageSupported(type) -{ - try { - window[type].setItem('PMATest', 'test'); - // Check whether key-value pair was set successfully - if (window[type].getItem('PMATest') === 'test') { - // Supported, remove test variable from storage - window[type].removeItem('PMATest'); - return true; - } - } catch(error) { - // Not supported - PMA_ajaxShowMessage(PMA_messages.strNoLocalStorage, false); - } - return false; -} - /** * Unbind all event handlers before tearing down a page */ diff --git a/libraries/Header.class.php b/libraries/Header.class.php index bc3de55cea..91dd54e012 100644 --- a/libraries/Header.class.php +++ b/libraries/Header.class.php @@ -200,12 +200,12 @@ class PMA_Header $this->_scripts->addFile( 'get_image.js.php?theme=' . $theme_id ); + $this->_scripts->addFile('config.js'); $this->_scripts->addFile('doclinks.js'); $this->_scripts->addFile('functions.js'); $this->_scripts->addFile('navigation.js'); $this->_scripts->addFile('indexes.js'); $this->_scripts->addFile('common.js'); - $this->_scripts->addFile('config.js'); $this->_scripts->addFile('page_settings.js'); $this->_scripts->addCode($this->getJsParamsCode()); } From 6e6e40a77560443ea9a2ef2ebe5704b4718d4a49 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Tue, 16 Feb 2016 15:24:12 +1100 Subject: [PATCH 68/79] Fix #11964 Undefined index: TABLE_COMMENT in database structure page Signed-off-by: Madhura Jayaratne --- ChangeLog | 1 + libraries/Util.class.php | 1 + 2 files changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index 33e34dd3d0..476434e2eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,7 @@ phpMyAdmin - ChangeLog - issue #11677 sql-parser and php-gettext collide. - issue #11920 Can't disable backquotes in export - issue #11911 Inserts via tbl_change.php in VARBINARY columns does not allow using HEX() and MD5() +- issue #11964 Undefined index: TABLE_COMMENT in database structure page 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/Util.class.php b/libraries/Util.class.php index f19ec12600..c32c5edd1a 100644 --- a/libraries/Util.class.php +++ b/libraries/Util.class.php @@ -4897,6 +4897,7 @@ class PMA_Util 'ENGINE' => '', 'TABLE_TYPE' => '', 'TABLE_ROWS' => 0, + 'TABLE_COMMENT' => '', ); } } // end while From 310fd4b2c138321427e94fd7b92de987edda314d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Tue, 16 Feb 2016 08:59:37 +0100 Subject: [PATCH 69/79] Fix PHP error on loading invalid XML or ODS file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #11967 Signed-off-by: Michal Čihař --- ChangeLog | 1 + libraries/plugins/import/ImportOds.class.php | 2 +- libraries/plugins/import/ImportXml.class.php | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 13658692ef..56b2623895 100644 --- a/ChangeLog +++ b/ChangeLog @@ -33,6 +33,7 @@ phpMyAdmin - ChangeLog - issue Field names and aliases are being correctly parsed now. - issue #11959 Fix javascript error in setup - issue #11964 Undefined index: TABLE_COMMENT in database structure page +- issue #11967 Fix PHP error on loading invalid XML or ODS file 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/plugins/import/ImportOds.class.php b/libraries/plugins/import/ImportOds.class.php index b884c13323..29133b4762 100644 --- a/libraries/plugins/import/ImportOds.class.php +++ b/libraries/plugins/import/ImportOds.class.php @@ -149,7 +149,7 @@ class ImportOds extends ImportPlugin * result in increased performance without the need to * alter the code in any way. It's basically a freebee. */ - $xml = simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT); + $xml = @simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT); unset($buffer); diff --git a/libraries/plugins/import/ImportXml.class.php b/libraries/plugins/import/ImportXml.class.php index f6d97170b5..bacd974f41 100644 --- a/libraries/plugins/import/ImportXml.class.php +++ b/libraries/plugins/import/ImportXml.class.php @@ -106,7 +106,7 @@ class ImportXml extends ImportPlugin * result in increased performance without the need to * alter the code in any way. It's basically a freebee. */ - $xml = simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT); + $xml = @simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT); unset($buffer); From 7881a461a34406f2722e60378f5e856849f222af Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Tue, 16 Feb 2016 19:47:12 +1100 Subject: [PATCH 70/79] Fix #11969 Missing confirmation while dropping a view in view_operations.php Signed-off-by: Madhura Jayaratne --- view_operations.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/view_operations.php b/view_operations.php index 4e6e923cd8..d503c068d1 100644 --- a/view_operations.php +++ b/view_operations.php @@ -18,6 +18,14 @@ $pma_table = new PMA_Table($GLOBALS['table'], $GLOBALS['db']); */ require_once 'libraries/operations.lib.php'; +/** + * Load JavaScript files + */ +$response = PMA_Response::getInstance(); +$header = $response->getHeader(); +$scripts = $header->getScripts(); +$scripts->addFile('tbl_operations.js'); + /** * Runs common work */ From 36e3b337de56a615148c1aebb2c83b5a4821a6ca Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Tue, 16 Feb 2016 19:51:46 +1100 Subject: [PATCH 71/79] ChangeLog entry for #11969 Signed-off-by: Madhura Jayaratne --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index 56b2623895..072143a2f6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -34,6 +34,7 @@ phpMyAdmin - ChangeLog - issue #11959 Fix javascript error in setup - issue #11964 Undefined index: TABLE_COMMENT in database structure page - issue #11967 Fix PHP error on loading invalid XML or ODS file +- issue #11969 Missing confirmation while dropping a view in view_operations.php 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 From 50af85cf34da89a76f649cc6fa7f7cbb2fb284b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Tue, 16 Feb 2016 10:19:33 +0100 Subject: [PATCH 72/79] Fix export of index comments in SQL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #11968 Signed-off-by: Michal Čihař --- ChangeLog | 1 + libraries/plugins/export/ExportSql.class.php | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 072143a2f6..1a2d3b7cde 100644 --- a/ChangeLog +++ b/ChangeLog @@ -35,6 +35,7 @@ phpMyAdmin - ChangeLog - issue #11964 Undefined index: TABLE_COMMENT in database structure page - issue #11967 Fix PHP error on loading invalid XML or ODS file - issue #11969 Missing confirmation while dropping a view in view_operations.php +- issue #11968 Fix export of index comments in SQL 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/plugins/export/ExportSql.class.php b/libraries/plugins/export/ExportSql.class.php index 5b68c22667..715ad48f92 100644 --- a/libraries/plugins/export/ExportSql.class.php +++ b/libraries/plugins/export/ExportSql.class.php @@ -1627,7 +1627,9 @@ class ExportSql extends ExportPlugin $indexes_fulltext[] = $field->build($field); unset($statement->fields[$key]); } else if (empty($GLOBALS['sql_if_not_exists'])) { - $indexes[] = $field->build($field); + $indexes[] = str_replace( + 'COMMENT=\'', 'COMMENT \'', $field::build($field) + ); unset($statement->fields[$key]); } } From 2fdd232873daf36e3141bbedcf5f214cf0065187 Mon Sep 17 00:00:00 2001 From: Atul Pratap Singh Date: Tue, 16 Feb 2016 23:58:21 +0530 Subject: [PATCH 73/79] navigation.js registeronload getting fired on all node clicks, causing reload on all clicks Signed-off-by: Atul Pratap Singh --- js/navigation.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/js/navigation.js b/js/navigation.js index a4fd2724b7..222acd1635 100644 --- a/js/navigation.js +++ b/js/navigation.js @@ -515,9 +515,6 @@ $(function () { } }); }); -}); - -AJAX.registerOnload('navigation.js', function () { // Check if session storage is supported if (isStorageSupported('sessionStorage')) { var storage = window.sessionStorage; @@ -538,11 +535,6 @@ AJAX.registerOnload('navigation.js', function () { } } }); -AJAX.registerTeardown('navigation.js', function () { - if (isStorageSupported('sessionStorage')) { - $(document).off('submit', 'form.config-form'); - } -}); /** * updates the tree state in sessionStorage From 176d63f10851ec2dd4331ac6aa03453ca417c8ee Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Thu, 18 Feb 2016 15:55:56 +1100 Subject: [PATCH 74/79] Fix #11979 DECLARE not accepted as valid SQL Signed-off-by: Madhura Jayaratne --- js/codemirror/addon/lint/sql-lint.js | 3 ++- js/functions.js | 10 ++++++---- js/rte.js | 10 +++++++++- lint.php | 12 ++++++++++++ 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/js/codemirror/addon/lint/sql-lint.js b/js/codemirror/addon/lint/sql-lint.js index 0a1f396f4b..92b30f2702 100644 --- a/js/codemirror/addon/lint/sql-lint.js +++ b/js/codemirror/addon/lint/sql-lint.js @@ -31,7 +31,8 @@ CodeMirror.sqlLint = function(text, updateLinting, options, cm) { data: { sql_query: text, token: PMA_commonParams.get('token'), - server: PMA_commonParams.get('server') + server: PMA_commonParams.get('server'), + options: options.lintOptions, }, success: handleResponse }); diff --git a/js/functions.js b/js/functions.js index 52c959d01f..edf8f457eb 100644 --- a/js/functions.js +++ b/js/functions.js @@ -116,11 +116,12 @@ function PMA_handleRedirectAndReload(data) { /** * Creates an SQL editor which supports auto completing etc. * - * @param $textarea jQuery object wrapping the textarea to be made the editor - * @param options optional options for CodeMirror - * @param resize optional resizing ('vertical', 'horizontal', 'both') + * @param $textarea jQuery object wrapping the textarea to be made the editor + * @param options optional options for CodeMirror + * @param resize optional resizing ('vertical', 'horizontal', 'both') + * @param lintOptions additional options for lint */ -function PMA_getSQLEditor($textarea, options, resize) { +function PMA_getSQLEditor($textarea, options, resize, lintOptions) { if ($textarea.length > 0 && typeof CodeMirror !== 'undefined') { // merge options for CodeMirror @@ -140,6 +141,7 @@ function PMA_getSQLEditor($textarea, options, resize) { lint: { "getAnnotations": CodeMirror.sqlLint, "async": true, + "lintOptions": lintOptions } }); } diff --git a/js/rte.js b/js/rte.js index fcc85d7b3f..05366a83cd 100644 --- a/js/rte.js +++ b/js/rte.js @@ -15,6 +15,8 @@ var RTE = { */ object: function (type) { $.extend(this, RTE.COMMON); + this.editorType = type; + switch (type) { case 'routine': $.extend(this, RTE.ROUTINE); @@ -58,6 +60,10 @@ RTE.COMMON = { * the jQueryUI dialog buttons */ buttonOptions: {}, + /** + * @var editorType Type of the editor + */ + editorType: null, /** * Validate editor form fields. */ @@ -360,7 +366,9 @@ RTE.COMMON = { * the Definition textarea. */ var $elm = $('textarea[name=item_definition]').last(); - that.syntaxHiglighter = PMA_getSQLEditor($elm); + var linterOptions = {}; + linterOptions[that.editorType + '_editor'] = true; + that.syntaxHiglighter = PMA_getSQLEditor($elm, {}, null, linterOptions); // Execute item-specific code that.postDialogShow(data); diff --git a/lint.php b/lint.php index 3aee35ba96..0ee1e28e7b 100644 --- a/lint.php +++ b/lint.php @@ -35,4 +35,16 @@ PMA_Response::getInstance()->disable(); PMA_headerJSON(); +if (! empty($_POST['options'])) { + $options = $_POST['options']; + + if (! empty($options['routine_editor'])) { + $sql_query = 'CREATE PROCEDURE `a`() ' . $sql_query; + } elseif (! empty($options['trigger_editor'])) { + $sql_query = 'CREATE TRIGGER `a` AFTER INSERT ON `b` FOR EACH ROW ' . $sql_query; + } elseif (! empty($options['event_editor'])) { + $sql_query = 'CREATE EVENT `a` ON SCHEDULE EVERY MINUTE DO ' . $sql_query; + } +} + echo json_encode(PMA_Linter::lint($sql_query)); From 47ff669fdc0d9b00c50c878dd85b7b27106daf94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Fri, 19 Feb 2016 13:33:14 +0100 Subject: [PATCH 75/79] Changelog entry for #11979 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index 1a2d3b7cde..45cebabc41 100644 --- a/ChangeLog +++ b/ChangeLog @@ -36,6 +36,7 @@ phpMyAdmin - ChangeLog - issue #11967 Fix PHP error on loading invalid XML or ODS file - issue #11969 Missing confirmation while dropping a view in view_operations.php - issue #11968 Fix export of index comments in SQL +- issue #11979 DECLARE not accepted as valid SQL 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 From fe5c54fadf30619ffd6ebf5e2e89a322b2bfb35b Mon Sep 17 00:00:00 2001 From: Isaac Bennetch Date: Fri, 19 Feb 2016 21:30:11 -0500 Subject: [PATCH 76/79] Improve GPG examples using Isaac's key Signed-off-by: Isaac Bennetch --- doc/setup.rst | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/doc/setup.rst b/doc/setup.rst index 8615a388a1..ee34814f15 100644 --- a/doc/setup.rst +++ b/doc/setup.rst @@ -269,9 +269,9 @@ for it. Once you have both of them in the same folder, you can verify the signat .. code-block:: console - $ gpg --verify phpMyAdmin-4.4.9-all-languages.zip.asc - gpg: Signature made Fri Jun 12 13:09:58 2015 CEST using RSA key ID 81AF644A - gpg: Can't check signature: No public key + $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc + gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 + gpg: Can't check signature: public key not found As you can see gpg complains that it does not know the public key. At this point you should do one of the following steps: @@ -286,9 +286,9 @@ point you should do one of the following steps: .. code-block:: console - $ gpg --keyserver hkp://pgp.mit.edu --recv-keys 81AF644A - gpg: requesting key 81AF644A from hkp server pgp.mit.edu - gpg: key 81AF644A: public key "Marc Delisle " imported + $ gpg --keyserver hkp://pgp.mit.edu --recv-keys 8259BD92 + gpg: requesting key 8259BD92 from hkp server pgp.mit.edu + gpg: key 8259BD92: public key "Isaac Bennetch " imported gpg: no ultimately trusted keys found gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) @@ -299,12 +299,13 @@ in the key: .. code-block:: console - $ gpg --verify phpMyAdmin-4.4.9-all-languages.zip.asc - gpg: Signature made Fri Jun 12 13:09:58 2015 CEST using RSA key ID 81AF644A - gpg: Good signature from "Marc Delisle " [unknown] + $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc + gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 + gpg: Good signature from "Isaac Bennetch " + gpg: aka "Isaac Bennetch " gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. - Primary key fingerprint: 436F F188 4B1A 0C3F DCBF 0D79 FEFC 65D1 81AF 644A + Primary key fingerprint: 3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92 The problem here is that anybody could issue the key with this name. You need to ensure that the key is actually owned by the mentioned person. The GNU Privacy @@ -312,29 +313,29 @@ Handbook covers this topic in the chapter `Validating other keys on your public keyring`_. The most reliable method is to meet the developer in person and exchange key fingerprints, however you can also rely on the web of trust. This way you can trust the key transitively though signatures of others, who have met -the developer in person. For example you can see how `Marc's key links to +the developer in person. For example you can see how `Isaac's key links to Linus's key`_. Once the key is trusted, the warning will not occur: .. code-block:: console - $ gpg --verify phpMyAdmin-4.4.9-all-languages.zip.asc - gpg: Signature made Fri Jun 12 13:09:58 2015 CEST using RSA key ID 81AF644A - gpg: Good signature from "Marc Delisle " [full] + $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc + gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 + gpg: Good signature from "Isaac Bennetch " [full] Should the signature be invalid (the archive has been changed), you would get a clear error regardless of the fact that the key is trusted or not: .. code-block:: console - $ gpg --verify phpMyAdmin-4.4.9-all-languages.zip.asc - gpg: Signature made Fri Jun 12 13:09:58 2015 CEST using RSA key ID 81AF644A - gpg: BAD signature from "Marc Delisle " [unknown] + $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc + gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 + gpg: BAD signature from "Isaac Bennetch " [unknown] .. _Validating other keys on your public keyring: https://www.gnupg.org/gph/en/manual.html#AEN335 -.. _Marc's key links to Linus's key: http://pgp.cs.uu.nl/mk_path.cgi?FROM=00411886&TO=81AF644A +.. _Isaac's key links to Linus's key: http://pgp.cs.uu.nl/mk_path.cgi?FROM=00411886&TO=8259BD92 .. index:: From 386c4bef201b0cb7722b2a3512e39286bd7c3ce5 Mon Sep 17 00:00:00 2001 From: Isaac Bennetch Date: Mon, 25 Jan 2016 15:10:56 -0500 Subject: [PATCH 77/79] Document Isaac as the new release manager Signed-off-by: Isaac Bennetch --- doc/setup.rst | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/doc/setup.rst b/doc/setup.rst index ee34814f15..7440c2a4eb 100644 --- a/doc/setup.rst +++ b/doc/setup.rst @@ -253,14 +253,25 @@ Verifying phpMyAdmin releases +++++++++++++++++++++++++++++ Since July 2015 all phpMyAdmin releases are cryptographically signed by the -releasing developer, who is currently Marc Delisle. His key id is +releasing developer, who through January 2016 was Marc Delisle. His key id is 0x81AF644A, his PGP fingerprint is: .. code-block:: console 436F F188 4B1A 0C3F DCBF 0D79 FEFC 65D1 81AF 644A -and you can get more identification information from `https://keybase.io/lem9 `_. You should verify that the signature matches +and you can get more identification information from `https://keybase.io/lem9 `_. + +Beginning in January 2016, the release manager is Isaac Bennetch. His key id is +0x8259BD92, and his PGP fingerprint is: + +.. code-block:: console + + 3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92 + +and you can get more identification information from `https://keybase.io/ibennetch `_. + +You should verify that the signature matches the archive you have downloaded. This way you can be sure that you are using the same code that was released. From 2e26e336712d05b63c5320e27964658c9f7f61bb Mon Sep 17 00:00:00 2001 From: Isaac Bennetch Date: Mon, 22 Feb 2016 09:53:25 -0500 Subject: [PATCH 78/79] Archive old changelog entries Signed-off-by: Isaac Bennetch --- ChangeLog | 589 ------------------------------------------------------ 1 file changed, 589 deletions(-) diff --git a/ChangeLog b/ChangeLog index 45cebabc41..723f059f0d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -80,595 +80,6 @@ phpMyAdmin - ChangeLog - issue [Security] Full path disclosure vulnerability in SQL parser, see PMASA-2016-8 - issue [Security] XSS vulnerability in SQL editor, see PMASA-2016-9 -4.5.3.1 (2015-12-25) -- issue #11774 Undefined offset 2 -- issue [Security] Path disclosure, see PMASA-2015-6 - -4.5.3.0 (2015-12-23) -- issue #11744 Incomplete results of UNION ALL -- issue #11742 MATCH AGAINST keywords not recognized -- issue #11723 syntax verifier is not knowing "STRAIGHT_JOIN" -- issue #11699 REPLACE() function confused with REPLACE statement -- issue #11690 FLUSH word not recognized by parser -- issue #11664 Online syntax verifier bug - "IF" on SELECT statement -- issue #11665 Format breaks query with COUNT() -- issue Undefinex index: SendErrorReports -- issue Incorrect script name in include -- issue #11685 Warning: Invalid argument supplied for foreach() -- issue #11687 Delimiter missing while exporting multiple db routines -- issue #11684 mysql_native_password with MariaDB bug -- issue #11693 Flush privileges overusage - related to #11597 -- issue #11691 Query was empty on creating User in 4.5.2 -- issue #11695 PMA_getDataForDeleteUsers() warning -- issue #11698 Cannot create user on Percona Server -- issue Properly report error on connecting -- issue #11706 Database export template not saving compression option -- issue #11721 Fix single quote export for servers in ANSI_QUOTES mode -- issue #11714 Avoid duplicite fetching of table information -- issue #11724 Temporary fix for live data edit of big sets is not working -- issue IE 8 compatibility in console -- issue #11732 Exporting feature does not work with union table -- issue #11728 CSV import skip row count after -- issue #11679 Cannot export results of some queries -- issue #11720 Message "An account already exists..." incorrectly displayed -- issue #11758 Missing quoting of table in ALTER CONVERT query -- issue #11752 PMA 4.5.2 breaks MySQL Master-Master Cluster -- issue #11757 Export and preview show different SQL for character set -- issue #11749 Fix possible undefined variables in table operations - -4.5.2.0 (2015-11-23) -- issue #11589 Incorrect parameter in mysqli_fetch_fields() -- issue #11592 Missing headers in zipped export -- issue #11590 Parser: Array to string conversion -- issue #11597 Huge binary log growth on 4.5.x -- issue #11594 'only_db' config option bug when db names contain underscore and are grouped -- issue #11607 Unable to change password from Login information tab -- issue #11610 Undefined variable: res_rel -- issue #11611 Warning while exporting schema to PDF -- issue #11612 Undefined index: new_row_format -- issue #11605 Changing hostname kills password -- issue #11614 Undefined variable: db -- issue #11627 CREATE TABLE/INSERT INTO executed twice (ctrl+enter) -- issue #11630 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given -- issue #11632 Exporting GIS visualization ignores start and row count -- issue #11476 Errors instead of git info when PHP has no gzip support -- issue #11633 CodeMirror tooltip shows below modal window -- issue #11639 Bug with the MainBackground Color -- issue Profiling checkbox is missing -- issue #11642 Properly handle session expiry after POST requests -- issue #11648 Notice in ./export.php#214 Undefined index: quick_or_custom -- issue #11646 Unrecognized keywords -- issue #11635 Sql not executed properly -- issue #11631 Linter warnings when creating new user -- issue #11626 wrong row count for query results -- issue #11608 Analyzer doesn't recognize GRANT statements -- issue #11602 Parser warnings (subqueries) -- issue #11658 Collation column is empty in table Structure -- issue #11661 Error changing table's column encoding - -4.5.1.0 (2015-10-23) -- issue Invalid argument supplied for foreach() -- issue array_key_exists() expects parameter 2 to be array -- issue #11480 Notice Undefined index: drop_database -- issue #11486 Server variable edition in ANSI_QUOTES sql_mode: losing current value -- issue #11491 Propose table structure broken -- issue #11464 phpMyAdmin suggests upgrading to newer version not usable on that system -- issue #11495 'PMA_Microhistory' is undefined -- issue #11496 Incorrect definition for getTablesWhenOpen() -- issue #11500 Error when creating new user on MariaDB 10.0.21 -- issue #11505 Notice on htmlspecialchars() -- issue Notice in Structure page of views -- issue #11510 AUTO_INCREMENT always exported when IF NOT EXISTS is on -- issue #11516 Some partitions are missing in copied table -- issue #11521 Notice of undefined variable when performing SHOW CREATE -- issue #11509 Error exporting sql query results with table alias -- issue #11512 SQL editing window does not recognise 'OUTER' keyword in 'LEFT OUTER JOIN' -- issue #11518 "NOT IN" clause not recognized (MySQL 5.6 and 5.7) -- issue #11524 Yellow star does not change in database Structure after add/remove from favorites -- issue #11531 Invalid SQL in table definition when exporting table -- issue #11526 Foreign key to other database's tables fails -- issue #11519 Bug while exporting results when a joined table field name is in SELECT query -- issue #11522 Strange behavior on table rename -- issue #11539 Rename table does not result in refresh in left panel -- issue #11541 Missing arguments for PMA_Table::generateAlter() -- issue #11544 Notices about undefined indexes on structure pages of information_schema tables -- issue Change minimum PHP version for Composer -- issue #11542 Import parser and backslash -- issue #11546 "Visualize GIS data" seems to be broken -- issue #11548 Confirm box on "Reset slave" option -- issue Fix cookies clearing on version change -- issue #11558 Cannot execute SQL with subquery -- issue #11520 Incorrect syntax creating a user using mysql_native_password with MariaDB -- issue #11561 Cannot use third party auth plugins - -4.5.0.2 (2015-09-25) -- issue #11497 Incorrect indexes when exporting - -4.5.0.1 (2015-09-24) -- issue #11492 AUTO_INCREMENT statements are partly missing from exports - -4.5.0.0 (2015-09-23) -+ rfe Pagination for GIS visualization -+ issue #6207 Usability improvements for console -+ issue #6310 Access to Add columns text-box and Go button when creating table -+ issue #6007 Add lock tables, disable keys options -+ issue #6306 Additional page locking -+ issue #6314 Support MySQL 5.7 syntax for password change -+ issue #6319 Display/edit index name -+ issue #6318 Toggle autocomplete of table and column names -+ issue #5633 Manage multiple variable in bookmarked query -+ issue #5642 Show edit/delete also when there is calculated column -+ issue #6313 Show databases as list instead of as dropdown when no database is selected -+ rfe Optional dark theme for the console -+ issue #5053 PDF schema sort options -+ issue #5543 Structure in PDF export -+ issue #6327 Have ZeroConf create phpmyadmin DB if possible -+ issue #5462 Warning before silent data conversion/truncation -+ issue #6338 Support a default page in designer -+ issue #6339 Allow copying mutiple rows -+ issue #6334 No SQL query for loading data -+ issue #6341 New data validation feature and datetime type -+ issue #6324 Importing and exporting pMA meta-data -+ issue #6330 Add grouping to stored procedures in the navigation tree -+ issue #6275 Support IPv6 browser transformation -+ rfe Option groups for 'With selected' dropdown in database structure page -+ issue #6347 Support CHECKSUM TABLE operation -+ issue #6088 Support for Paramaters with raw SQL -+ issue #5844 Show original size of truncated columns -+ issue #6114 Explain analyzer -+ issue #6186 Add "Drop partition" option to partition tools -+ issue #6354 Procedures window shift-click should select multiple rows -+ issue #6355 Designer: "Sticky" menu option -+ issue #6357 Directly show table comments in structure view -+ issue #6259 Page-related settings -+ issue #5356 Alter privileges when renaming or copying a database -- issue #11256 Slowness due to large number of routines -- issue #11258 GROUP_CONCAT shown as GROUPBY_CONCAT in CodeMirror autocomplete -+ issue #5946 Work with --skip-grant-tables -- issue #11266 "Sort by key" drop-down value is lost -+ issue #6287 Browse: improve display of right-aligned data -- issue #11265 Textarea rows settings ignored Features > Text fields -+ issue #6358 MIME types should be lower case -- issue #11226 Drop table doesn't remove the table name from navigation bar -+ issue #6360 MySQL and MariaDB functions INET6_ATON and INET6_NTOA -- bug Link to get real row counts of all the views in a db, at once -- issue #11275 Drizzle version numbers -+ issue #5400 Rewrite print view using CSS; fixes print view failures on multi-query statements -+ issue #6362 Support spatial indexes in table create form -+ issue #6068 Use CTRL or ALT plus arrow keys for navigation in grid editor -+ rfe Remove support for Shift + Click on function name to apply to all rows in insert/edit page -+ issue #6326 Don't group tables in tree if the result has only one group -- issue #11287 When hide table structure actions is false, action should be in a row -+ issue #5425 Batch changing the collation of each column in a table -- issue #10918 QBE generates wrong query -+ issue #6292 Use plain English descriptors instead of script names for icon link destinations -+ issue #6239 Disable foreign key checks for some operations -- issue #11296 "With selected" links doesn't work in table browse -- issue #11166 Query builder: missing joint for the intermediary table -+ issue #6251 Integrate SQL debugging into console -- issue #11061 Improve/restore non-unique index row editing -- issue #11301 MySQL errors are not shown when DebugSQL is enabled -+ issue #5037 One file per table and one file per database export option -+ issue #5759 Designer settings should be part of saved state -+ issue #6257 Option to remove functions, procedures, etc., from navigation tree -+ issue #5388 Column privileges and update -+ issue #6231 Cant use external config file -+ issue #6252 CSV import: Allow "Columns escaped with" to be optional -+ issue #6262 Being able to use multiple servers at the same time when using cookie auth -+ issue #6301 select structure or data for each table when exporting -- issue #11261 Autocomplete completes the original table name when joining multiple aliased tables -+ rfe Remove configuration storage data related to a user upon deleting the user -+ issue #6298 Improved processlist for mariadb -+ issue #6300 Warn about "Any user" potential problem -+ issue #6368 Hide/disable edit links for read-only variables -+ issue #6365 Human readable/writable URLs (html5 api) -+ rfe Support virtual columns in MySQL 5.7.5+ -+ issue #6215 Support for virtual/persistent columns in MariaDB -- issue #11314 Undefined work upon upgrade to new version -- issue #1817 Creating configuration storage tables fail in MySQL 5.7 -- issue #6118 Parser does not handle nested selects -- issue #5437 Support SELECT ... FROM DUAL -- issue #4962 Support UNION -- issue #11322 Missing null checkbox when grid editing a null cell -+ Upgrade TCPDF to version 6.2.9 -+ issue #6102 Add SHA256 security password support -- issue #10250 Displayed git revision info is not set -+ Improved schema SVG export -- issue #10726 Do not try to set port 80 for https requests -+ issue #11394 Export/import Designer view -+ Partition support in table Structure -+ issue #11414 Unclear export options / organization / hierarchy - Set minimum required PHP version to 5.5 (older versions are EOL) -- issue #11407 ALTER TABLE failing on import when table exists -- issue Do not export `sys` database when exporting server -- issue #11436 CREATE DATABASE should be enabled by default on server exports -- issue #11442 MySQL 5.7 and SHOW VARIABLES -- issue #11445 MySQL 5.7 and Status page for an unprivileged user -- issue #11448 Clarify doc about the MemoryLimit directive -- issue #11489 Cannot copy a database under certain conditions - -4.4.15.1 (2015-10-23) -- issue #11464 phpMyAdmin suggests upgrading to newer version not usable on that system -- issue [security] Content spoofing on url.php - -4.4.15.0 (2015-09-20) -- issue #11411 Undefined "replace" function on numeric scalar -- issue #11421 Stored-proc / routine - broken parameter parsing -- issue Missing name for configuration read_as_multibytes -- issue #11431 Incorrect "No row selected" message -- issue #11447 MySQL 5.5 and the language system variable -- issue #11452 Semantics of export and import icons are mixed up -- issue #11451 Designer-Bug in move.js on multiple server configuration -- issue #11458 Invalid UTF-8 sequence in argument -- issue #11457 Request URI too large -- issue Invalid argument supplied for foreach() -- issue #11461 Foreign key constraints for InnoDB tables with upper-case letters disabled -- issue #11487 Warning when entering Query page - -4.4.14.1 (2015-09-08) -- issue [security] reCaptcha bypass - -4.4.14.0 (2015-08-20) -- issue #11367 Export after search, missing WHERE clause -- issue #11380 Incomplete message after import -- issue Incorrect scalar type declaration (reported under PHP 7) -- issue #11389 ReCaptcha produces deprecated messages under PHP 7 -- issue #11387 phpseclib < 2.0 produces deprecated messages on PHP 7 -- issue #11404 "Switch to copied table" doesn't work -- issue #11406 Missing quotes after calling "distinct values" -- issue #11386 Cannot import database with long data in one column -- issue #11410 SPATIAL index option is not clickable - -4.4.13.1 (2015-08-08) -- issue #11368 SQL error when importing phpMyAdmin dump file - -4.4.13.0 (2015-08-07) -- issue #1808 "Improve table structure" generates invalid SQL -- issue Once checked "Show only active" checkbox is always checked -- issue #1813 Delete rows using "Check All" is broken -- issue Fix PHP 7 possible binding ambiguity -- issue #11326 Exported schema includes all the tables of the database -- issue #11339 Results not displayed if query ends in delimiter and comment -- issue #11320 Live edit of data fields is not working always -- issue Table list in navigation collapses when entering into a table in another page -- issue #11364 JS error while trying to auto navigate to db structure page when db creation has failed - -4.4.12.0 (2015-07-20) -- bug Saved chart image does not have a proper name or an extension -- bug #4976 Timepicker CSS issues in Original theme -- bug #4975 Move/Copy/Rename operations on Table/Db fail on Drizzle server -- bug #4826 Two inline edit windows -- bug #4979 Problem when import *.ods file -- bug Add missing head tag -- bug #4985 Column headers move when scrolling - -4.4.11.0 (2015-07-06) -- bug Missing selected/entered values when editing active options in visual query builder -- bug #4969 Autoload from prefs_storage not behaving properly -- bug #4972 Incorrect length computed for binary data -- bug Remove character set from create_tables_drizzle.sql -- bug #4973 Users overview needs clarification -- bug #4974 Creating a database from console doesn't update navigation panel -- bug #4844 FAQ 1.17 needs an update - -4.4.10.0 (2015-06-17) -- bug #4950 Issues in database selection for replication -- bug #4951 Trying to save chart as image crashes the browser -- bug #4953 cant drag sql.gz file onto import input -- bug #4960 Table creation results in GET request with missing server parameter that invalidates the session -- bug #4961 Javascript error when Designer is opened -- bug #4962 Insert by foreign key scrolls page to top -- bug #4955 Clicking on the navi logo does not always work -- bug External URL for $cfg['NavigationLogoLink'] causes JavaScript error when clicked - -4.4.9.0 (2015-06-04) -- bug #4920 relation view doesn't list fields of table in other database -- bug #4905 Sorting by an alias -- bug #4931 False error before entering reCAPTCHA -- bug #4909 central column with multiple server -- bug #4937 Custom export with backquotes off is not working -- bug #4908 Reverse proxy: infinite internal redirect (added warning in doc) -- bug #4942 Export to gzip saves plain text under Chrome - -4.4.8.0 (2015-05-28) -- bug Allow accessing visual query builder when pmadb is not configured -- bug #4893 Nav tree line alignment issue -- bug #4911 Lock page icon is not shown after fresh reload -- bug #4912 "Highlight pointer" and "Row marker" doesn't work properly -- bug Browse foreigners window goes out of the window -- bug #4918 Date field popup dialog position bug -- bug In /setup, PMA_messages is not defined -- bug #4924 Recaptcha failure -- bug #4930 Database copy doesn't work for tables with more than one FULLTEXT index -- bug #4929 Edit view structure doesn't load the algorithm -- bug #4923 Do not limit table comments to 60 characters - -4.4.7.0 (2015-05-16) -- bug #4876 Settings issues (Favorite tables shown twice in Settings) -- bug #4896 Non-styled error page when following results link -- bug #4894 Deleting without confirmation -- bug #4858 Issues with SQL autocomplete -- bug #4897 Column hint in SQL autocomplete is sometimes not shown -- bug #4898 JS error after selecting a field and press Enter -- bug Honor proxy settings when getting Git commit information -- bug Missing title on link -- bug #4512 ForceSSL Redirect Check -- bug Undefined index collation_connection -- bug Error when the reporting server is down -- bug Escape database and table names for partition maintenance -- bug Invalid value for CURLOPT_SSL_VERIFYPEER -- bug #4367 Import status infinite loop -- bug #4902 Designer: Loading does not work -- bug #4904 Setup: Overview > Display does not work -- bug #4906 Designer: pages from all databases - -4.4.6.1 (2015-05-13) -- bug #4899 [security] CSRF vulnerability in setup -- bug #4900 [security] Vulnerability allowing man-in-the-middle attack - -4.4.6.0 (2015-05-07) -- bug #4890 webkitStorageInfo and webkitIndexedDB is deprecated -- bug #4892 Undefined variable: unique_conditions -- bug #4891 CSV Import ignores "Replace table data with file" checkbox - -4.4.5.0 (2015-05-05) -- bug Table overhead stats: missing space before the unit -- bug Fix resize icon in Designer -- bug #4879 Exit fullscreen in Designer does not change the button text -- bug #4880 Designer icons missing when using original theme -- bug #4878 Column list of central columns is not cleared -- bug #4881 jQuery dialogs of the Designer are not displayed in fullscreen -- bug #4883 Search function breaks when searching for certain combinations of backslashes and slashes -- bug #4830 Maximum execution time exceeded in Util.class.php (better fix) -- bug #4885 Some icons are above the overlay of jQuery dialogs -- bug #4886 Clicking on external links in advisor rules give JS error -- bug #4888 Filter in central columns does not work in other languages - -4.4.4.0 (2015-04-26) -- bug #4863 Edit vs Change -- bug #4859 Don't scroll (to bottom) when editing multiple rows -- bug #4862 Misaligned Inline edit field -- bug #4861 Use of undefined constant PMA_DRIZZLE -- bug #4865 sprintf(): Too few arguments -- bug #4866 Limit column ordering in index edit dialog -- bug #4867 Incorrect ALTER TABLE statement generated -- bug #4870 Inconsistency in 'Ignore' checkbox in insert page -- bug #4869 Drop column action not asking to confirm -- bug #4871 Error on creating table -- bug Undefined index: Rows - -4.4.3.0 (2015-04-20) -- bug #4851 PHP errors in login dialogue -- bug #4207 json_encode error due to strftime returning non utf8 chars in Windows 8.1 Chinese version -- bug #4845 White screen (Cloudflare) -- bug #4794 Server error viewing table content -- bug Fix issues related to number of decimal places in time -- bug #4853 Relation view between 1600 and 1780 px -- bug PHP 7 compatibility in php-gettext -- bug PHP 7 compatibility in bfShapeFiles -- bug PHP 7 session_regenerate_id() warning -- bug #4857 Alter table after changing column name error -- bug #4830 Maximum execution time exceeded in Util.class.php - -4.4.2.0 (2015-04-13) -- bug #4835 PMA_hideShowConnection not called after submit_num_fields -- bug #4836 Server warning after moving from console to direct clicks -- bug #4837 Duplicate new version notification when using the "Back" button -- bug #4839 DOC link in setting is broken -- bug #4841 Status page: Mislukte pogingen per uur value is incorrect -- bug MIME Transformation link fixed -- bug #4838 Prevents console window from moving out of the screen height -- bug #4829 Create procedure via SQL Editor not more possible -- bug #4833 CSS and Javascript are not compressed -- bug #4849 Functions accessed from navigation do not load on ajax dialog -- bug #4850 Relation view on 1920 - -4.4.1.1 (2015-04-08) -- bug #4846 Web server's error log is flooded - -4.4.1.0 (2015-04-07) -- bug #4813 MySQL 5.7.6 and the Users menu tab -- bug #4818 MySQL 5.7.6 and changing the password for another user -- bug #4819 Request URI too large -- bug #4814 MySQL 5.7.6 and Databases -- bug Use 'server' parameter in console to work in multi server environments -- bug Missing tooltip in monitor -- bug Missing sort icons in monitor -- bug #4805 Inline edit broken when using functions in query -- bug #4821 Timed-out import fails to restart when file represented -- bug #4754 pMA DB not detected properly -- bug #4825 Datepicker missing when changing number of rows on Insert page -- bug #4824 INNODB STATUS page is empty -- bug #4828 JavaScript is loaded in wrong order -- bug #4827 TEXT formatting doesn't work after inline editing -- bug #4822 Compress when php.ini output_buffering is active -- bug #4832 Sorting distinct values result loses links -- bug #4834 Do not attach token to css requests to improve caching - -4.4.0.0 (2015-04-01) -+ rfe #1553 InnoDB presently supports one FULLTEXT index creation at a time -+ rfe #1562 Allow tracking multiple table at once from database level tracking page -+ rfe #1564 Improve action message on Tracking page -+ rfe #1566 Change value of "Number of rows:" when "Show all" is checked -+ rfe Focus console by clicking on white space -+ rfe #1507 Part 1: Cycle through console history with keyboard up/down arrows -+ rfe #1579 Default to primary key when adding relation -+ rfe #1572 User prefs: Diff-friendly JSON for config -+ rfe #1567 Sever Variables Table UI Improvements -- bug #4675 phpMyAdmin should be able to work without 'examples' DIR - move SQL scripts to sql directory -+ rfe #1578 Warn about reserved word only when a column is created -+ rfe #1590 Recaptcha API v2 -+ rfe #1580 Individual Zeroconf PMA tables support -+ rfe #1525 Generate keys one per line -+ rfe #347 allow table with transformed column anywhere in FROM clause -+ rfe #1591 Shortcut link to search page -+ rfe #1568 Fold Add Column After / Before into dropdown -- bug #4705 Table structure: adding primary key doesn't refresh page -+ rfe #1582 SQL formatter -+ rfe #1597 Fast filter improvement: remove "x other results found" -- bug #4720 No error message on Missing extension mbstring -+ rfe #801 Builtin transformations and relations -+ rfe #767 USING BTREE support for HEAP/MEMORY tables -+ rfe #1596 Make "Options > Relational" configurable -+ rfe #719 More details in PDF relation view -+ rfe #1096 Cannot enter connection for federated engine table -+ rfe #954 Allow SALT in ENCRYPT function -+ rfe #1260 Setting LoginCookieValidity > session.gc_maxlifetime -+ rfe Transformation for JSON -- bug Fix isCanvasSupported for new window -+ rfe #1600 Clarify the "Inline" link -+ rfe #1179 Speed up slow triggers by using EVENT_OBJECT_SCHEMA -+ rfe #1192 ON DUPLICATE KEY UPDATE for loading CSV -- bug Cannot execute command from console (multi-server installation) -+ rfe #1208 linking from information_schema -+ rfe #1235 Relation view: move to main "Structure" page -+ rfe #1558 Designer menu with explicit text -+ rfe #937 Relations with views like with tables -+ rfe #1241 Browse Field -> Search -+ rfe #723 Provide sanity check for table/column names (table names) -+ rfe #1312 SessionTimeZone configuration directive -- bug Add missing confirmation when deleting tracking report entries -+ rfe Ability to disable foreign key check when emptying tables -+ rfe #1549 Reset auto-increment when exporting structure -+ rfe #1602 Recover query in redaction after session end -+ rfe #1605 After database creation, go to database structure page -+ rfe #1604 Show PHP version -- bug #4770 Multiple delete on table browse ignoring foreign key checkbox -+ rfe CodeMirror based SQL editor as an input transformation -+ rfe #1275 CodeMirror based JSON editor as an input transformation -+ rfe #685 Editor for HTML content -+ rfe #1595 make professional code editor suggestion -+ rfe #1606 processlist filter -+ rfe Change tracking activation status from db level tracking page -+ rfe #1207 Export users associated with a specific schema/database -+ rfe #1575 "Disable database expansion" : unclear directive name and -explanation -+ rfe #1607 Tool tip for lock icon when making changes to a page -+ rfe #1327 Hide 'Add user' link if user does not have privileges -+ rfe #501 Support for SSL GRANT option -+ rfe #1608 Central columns allowing setting SIGNED / UNSIGNED attribute for integer -+ rfe #1441 Add regexp match when using AllowArbitraryServer -- bug #4806 Unable to work with two different servers in two tabs - -4.3.14.0 (not yet released) - - -4.3.13.0 (2015-03-29) -- bug #4803 "Show hidden items" is sometimes hidden -- bug #4807 Breaks when sorting by multiple columns while using UNION -- bug #4798 Missing column when exporting in sql -- bug #4810 Broken find and replace -- bug #4804 Undefined Index after export schema -- bug #4802 Changelog page is not working -- bug #4815 Infinite calls to index.php -- bug #4820 Invalid links to dev.mysql.com -- bug #4718 simulate query fails, but actual query does not - -4.3.12.0 (2015-03-14) -- bug #4746 Right-aligned columns have left-aligned header -- bug #4779 PMA_Util::parseEnumSetValues fails on enums with UTF-8 values -- bug Undefined index savedsearcheswork -- bug #4788 Inline edit of DATE fields with NULL, NULL checkbox is under datepicker -- bug #4790 DROP TABLE/VIEW IF EXISTS are not tracked -- bug Compatibility with central columns of version 4.4 -- bug #4758 Firefox with auth_type to http with multiple server doesn't work anymore -- bug #4789 Views aren't dropped when copying a database -- bug #4784 Incomplete bookmark saving -- bug #4786 SELECT width on relations page - -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 -- bug Remove extra column heading in view structure page -- bug Add missing confirmation when deleting central columns -- bug Undefined index DisableIS -- bug #4763 Database export with more than 512 tables fails -- bug #4769 Previously set column aliases are destroyed if returned to the same table -- bug #4752 Incorrect page after creating table -- bug #4771 Central Columns not working, showing error - -4.3.9.0 (2015-02-05) -- bug #4728 Incorrect headings in routine editor -- bug #4730 Notice while browsing tables when phpmyadmin pma database exists, but not all the tables -- bug #4729 Display original field when using "Relational display column" option and display column is empty -- bug #4734 Default values for binary fields do not support binary values -- bug #4736 Changing display options breaks query highlighting -- bug Undefined index submit_type -- bug #4738 Header lose align when scrolling in Firefox -- bug #4741 in ./libraries/Advisor.class.php#184 vsprintf(): Too few arguments -- bug #4743 Unable to move cursor with keyboard in filter rows box -- bug Incorrect link in doc -- bug #4745 Tracking does not handle views properly -- bug #4706 Schema export doesn't handle dots in db/table name -- bug #3935 Table Header not displayed correct (Safari 5.0.5 Mac) -- bug #4750 Disable renaming referenced columns -- bug #4748 Column name center-aligned instead of left-aligned in Relations - -4.3.8.0 (2015-01-24) -- bug Undefined constant PMA_DRIZZLE -- bug #4712 Wrongly positioned date-picker while Grid-Editing -- bug #4714 Forced ORDER BY for own sql statements -- bug #4721 Undefined property: stdClass::$version -- bug #4719 'only_db' not working -- bug #4700 Error text: Internal Server Error -- bug #4722 Incorrect width table summary when favorite tables is disabled -- bug #4716 Collapse all in navigation panel is sometimes broken -- bug #4724 Cannot navigate in filtered table list -- bug #4717 Database navigation menu broken when resolution/screen is changing -- bug #4727 Collation column missing in database list when DisableIS is true -- bug Undefined index central_columnswork -- bug Undefined index favorite_tables - -4.3.7.0 (2015-01-15) -- bug #4694 js error on marking table as favorite in Safari (in private mode) -- bug #4695 Changing $cfg['DefaultTabTable'] doesn't update link and title -- bug Undefined index menuswork -- bug Undefined index navwork -- bug Undefined index central_columnswork -- bug #4697 Server Status refresh not behaving as expected -- bug Null argument in array_multisort() -- bug #4699 Navigation panel should not hide icons based on 'TableNavigationLinksMode' -- bug #4703 Unsaved schema page exported as pdf.pdf -- bug #4707 Call to undefined method PMA_Schema_PDF::dieSchema() -- bug #4702 URL is non RFC-2396 compatible in get_scripts.js.php - -4.3.6.0 (2015-01-07) -- bug Undefined index notices while configuring recent and favorite tables -- bug #4687 Designer breaks without configuration storage -- bug #4686 Select elements flicker and selects something else -- bug #4689 Setup tool creates "pma__favorites" incorrectly -- bug #4685 Call to a member function isUserType() on a non-object -- bug #4691 Do not include console when no server is selected -- bug #4688 File permissions in archive -- bug #4692 Dynamic javascripts gives 500 when db selected - -4.3.5.0 (2015-01-05) -- bug Auto-configuration: tables were not created automatically -- bug #4677 Advanced feature checker does not check for favorite tables feature -- bug #4678 Some of the data stored in configuration storage are not deleted upon db or table delete -- bug #4679 Setup does not allow providing a name for favorites table -- bug #4680 Number of favorite table are not configurable in setup -- bug #4681 'Central columns table' field in setup does not have a description -- bug #4318 Default connection collation and sorting -- bug #4683 Relational data is not properly updated on table rename -- bug #4655 Undefined index: collation_connection (second patch) -- bug #4682 4.3.3 & 4.3.4 Import sql created by mysqldump fails on foreign keys -- bug #4676 Auto-configuration issues -- bug #4416 New lines are removed when grid editing (part two: TEXT) - --- Older ChangeLogs can be found on our project website --- http://www.phpmyadmin.net/old-stuff/ChangeLogs/ From 4b3c91b0f5c19afec21a909f80bd4fd0e0a056dc Mon Sep 17 00:00:00 2001 From: Isaac Bennetch Date: Mon, 22 Feb 2016 09:56:51 -0500 Subject: [PATCH 79/79] Version 4.5.5 release Signed-off-by: Isaac Bennetch --- ChangeLog | 2 +- README | 2 +- doc/conf.py | 2 +- libraries/Config.class.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 723f059f0d..ba203a65c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,7 @@ phpMyAdmin - ChangeLog ====================== -4.5.5.0 (not yet released) +4.5.5.0 (2016-02-22) - issue Undefined index: is_ajax_request - issue #11855 Fix password change on MariaDB 10.1 and newer - issue #11874 Validate version information before further processing it diff --git a/README b/README index 93991384e0..52d35d8a75 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ phpMyAdmin - Readme =================== -Version 4.5.5-dev +Version 4.5.5 A set of PHP-scripts to manage MySQL over the web. diff --git a/doc/conf.py b/doc/conf.py index 8232cd14e3..12ea522e99 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -51,7 +51,7 @@ copyright = u'2012 - 2014, The phpMyAdmin devel team' # built documents. # # The short X.Y version. -version = '4.5.5-dev' +version = '4.5.5' # The full version, including alpha/beta/rc tags. release = version diff --git a/libraries/Config.class.php b/libraries/Config.class.php index 07af3b60a6..5819673249 100644 --- a/libraries/Config.class.php +++ b/libraries/Config.class.php @@ -114,7 +114,7 @@ class PMA_Config */ public function checkSystem() { - $this->set('PMA_VERSION', '4.5.5-dev'); + $this->set('PMA_VERSION', '4.5.5'); /** * @deprecated */