diff --git a/ChangeLog b/ChangeLog
index 69c85c0ff8..544d1f9038 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -28,6 +28,7 @@ phpMyAdmin - ChangeLog
- issue #11752 Improve detection of privileges for privilege adjusting
- issue #11854 Undefined property: stdClass::$releases at version check when disabled in config
- issue #11814 SQL comment and variable stripped from bookmark on save
+- issue Gracefully handle errors in regex based javascript search
4.5.3.1 (2015-12-25)
- issue #11774 Undefined offset 2
diff --git a/db_create.php b/db_create.php
index 54440b62dd..76e9cb5737 100644
--- a/db_create.php
+++ b/db_create.php
@@ -17,6 +17,10 @@ if (! PMA_DRIZZLE) {
}
require 'libraries/build_html_for_db.lib.php';
+if (! isset($_POST['new_db'])) {
+ PMA_Util::checkParameters(array('new_db'));
+}
+
/**
* Defines the url to return to in case of error in a sql statement
*/
diff --git a/db_designer.php b/db_designer.php
index 8acc99e69c..b1d63ec4ef 100644
--- a/db_designer.php
+++ b/db_designer.php
@@ -81,6 +81,8 @@ if (isset($_REQUEST['operation'])) {
return;
}
+require 'libraries/db_common.inc.php';
+
$script_display_field = PMA_getTablesInfo();
$tab_column = PMA_getColumnsInfo();
$script_tables = PMA_getScriptTabs();
@@ -126,8 +128,6 @@ $scripts->addFile('pmd/move.js');
$scripts->addFile('pmd/iecanvas.js', true);
$scripts->addFile('pmd/init.js');
-require 'libraries/db_common.inc.php';
-
list(
$tables,
$num_tables,
diff --git a/export.php b/export.php
index b7942a34ac..e50f4fdd4c 100644
--- a/export.php
+++ b/export.php
@@ -43,6 +43,7 @@ if (!defined('TESTSUITE')) {
$post_params = array(
'db',
'table',
+ 'what',
'single_table',
'export_type',
'export_method',
@@ -163,11 +164,12 @@ if (!defined('TESTSUITE')) {
}
$table = $GLOBALS['table'];
- // sanitize this parameter which will be used below in a file inclusion
- $what = PMA_securePath($_POST['what']);
PMA_Util::checkParameters(array('what', 'export_type'));
+ // sanitize this parameter which will be used below in a file inclusion
+ $what = PMA_securePath($_POST['what']);
+
// export class instance, not array of properties, as before
/* @var $export_plugin ExportPlugin */
$export_plugin = PMA_getPlugin(
diff --git a/gis_data_editor.php b/gis_data_editor.php
index ac876da4d9..be13aeeb0e 100644
--- a/gis_data_editor.php
+++ b/gis_data_editor.php
@@ -23,6 +23,10 @@ require_once 'libraries/common.inc.php';
require_once 'libraries/gis/GIS_Factory.class.php';
require_once 'libraries/gis/GIS_Visualization.class.php';
+if (! isset($_REQUEST['field'])) {
+ PMA_Util::checkParameters(array('field'));
+}
+
// Get data if any posted
$gis_data = array();
if (PMA_isValid($_REQUEST['gis_data'], 'array')) {
@@ -185,6 +189,9 @@ if ($geom_type == 'GEOMETRYCOLLECTION') {
}
for ($a = 0; $a < $geom_count; $a++) {
+ if (! isset($gis_data[$a])) {
+ continue;
+ }
if ($geom_type == 'GEOMETRYCOLLECTION') {
echo '
';
diff --git a/js/server_status_monitor.js b/js/server_status_monitor.js
index 14328a5975..55bc3b90ec 100644
--- a/js/server_status_monitor.js
+++ b/js/server_status_monitor.js
@@ -1695,7 +1695,15 @@ AJAX.registerOnload('server_status_monitor.js', function () {
if (val.length === 0) {
textFilter = null;
} else {
- textFilter = new RegExp(val, 'i');
+ try {
+ textFilter = new RegExp(val, 'i');
+ $('#filterQueryText').removeClass('error');
+ } catch(e) {
+ if (e instanceof SyntaxError) {
+ $('#filterQueryText').addClass('error');
+ textFilter = null;
+ }
+ }
}
var rowSum = 0, totalSum = 0, i = 0, q;
diff --git a/js/server_status_variables.js b/js/server_status_variables.js
index fa46f1fda9..47956f8464 100644
--- a/js/server_status_variables.js
+++ b/js/server_status_variables.js
@@ -48,7 +48,15 @@ AJAX.registerOnload('server_status_variables.js', function () {
if (word.length === 0) {
textFilter = null;
} else {
- textFilter = new RegExp("(^| )" + word, 'i');
+ try {
+ textFilter = new RegExp("(^| )" + word, 'i');
+ $(this).removeClass('error');
+ } catch(e) {
+ if (e instanceof SyntaxError) {
+ $(this).addClass('error');
+ textFilter = null;
+ }
+ }
}
text = word;
filterVariables();
diff --git a/js/server_variables.js b/js/server_variables.js
index 3b4dc11244..62f5ed7cf4 100644
--- a/js/server_variables.js
+++ b/js/server_variables.js
@@ -30,7 +30,15 @@ AJAX.registerOnload('server_variables.js', function () {
$filterField.keyup(function () {
var textFilter = null, val = $(this).val();
if (val.length !== 0) {
- textFilter = new RegExp("(^| )" + val.replace(/_/g, ' '), 'i');
+ try {
+ textFilter = new RegExp("(^| )" + val.replace(/_/g, ' '), 'i');
+ $(this).removeClass('error');
+ } catch(e) {
+ if (e instanceof SyntaxError) {
+ $(this).addClass('error');
+ textFilter = null;
+ }
+ }
}
filterVariables(textFilter);
});
diff --git a/libraries/sql.lib.php b/libraries/sql.lib.php
index 352800985b..ba054d3674 100644
--- a/libraries/sql.lib.php
+++ b/libraries/sql.lib.php
@@ -1093,6 +1093,11 @@ function PMA_countQueryResults(
$num_rows, $justBrowsing, $db, $table, $analyzed_sql_results
) {
+ /* Shortcut for not analyzed/empty query */
+ if (empty($analyzed_sql_results)) {
+ return 0;
+ }
+
if (!PMA_isAppendLimitClause($analyzed_sql_results)) {
// if we did not append a limit, set this to get a correct
// "Showing rows..." message
@@ -2029,7 +2034,8 @@ function PMA_executeQueryAndGetQueryResponse($analyzed_sql_results,
// (the parser never sets the 'union' key to 0).
// Handling is also not required if we came from the "Sort by key"
// drop-down.
- if (PMA_isRememberSortingOrder($analyzed_sql_results)
+ if (! empty($analyzed_sql_results)
+ && PMA_isRememberSortingOrder($analyzed_sql_results)
&& empty($analyzed_sql_results['union'])
&& ! isset($_REQUEST['sort_by_key'])
) {
diff --git a/schema_export.php b/schema_export.php
index ec1c4e0b54..b28ae6758f 100644
--- a/schema_export.php
+++ b/schema_export.php
@@ -22,6 +22,10 @@ require_once 'libraries/Index.class.php';
require_once 'libraries/pmd_common.php';
require_once 'libraries/plugin_interface.lib.php';
+if (! isset($_REQUEST['export_type'])) {
+ PMA_Util::checkParameters(array('export_type'));
+}
+
/**
* Include the appropriate Schema Class depending on $export_type
* default is PDF
diff --git a/test/libraries/PMA_operations_test.php b/test/libraries/PMA_operations_test.php
index f8f122cdbe..55e15093e2 100644
--- a/test/libraries/PMA_operations_test.php
+++ b/test/libraries/PMA_operations_test.php
@@ -69,9 +69,11 @@ class PMA_Operations_Test extends PHPUnit_Framework_TestCase
{
$_REQUEST['db_collation'] = 'db1';
+ $html = PMA_getHtmlForRenameDatabase("pma");
+ $this->assertContains('db_operations.php', $html);
$this->assertRegExp(
- '/.*db_operations.php(.|[\n])*db_rename([\n]|.)*Rename database to.*/m',
- PMA_getHtmlForRenameDatabase("pma")
+ '/.*db_rename.*Rename database to.*/',
+ $html
);
}