Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Hi this is pre-approval request to allow version upgrade for phpMyAdmin. The new upstream version was released yesterday with dozen of security fixes and I think it's better to do full upgrade now than cherry picking individual fixes. The another good reason is that upstream 4.2.x releases are in bug fixing only mode. Upstream changelog: 4.2.12.0 (2014-11-20) - - bug #4574 Blank/white page when JavaScript disabled - - bug #4577 Multi row actions cause full page reloads - - bug ReferenceError: targeurl is not defined - - bug Incorrect text/icon display in Tracking report - - bug #4404 Recordset return from procedure display nothing - - bug #4584 Edit dialog for routines is too long for smaller displays - - bug #4586 Javascript error after moving a column - - bug #4576 Issue with long comments on table columns - - bug #4599 Input field unnecessarily selected on focus - - bug #4602 Exporting selected rows exports all rows of the query - - bug #4444 No insert statement produced in SQL export for queries with alias - - bug #4603 Field disabled when internal relations used - - bug #4596 [security] XSS through exception stack - - bug #4595 [security] Path traversal can lead to leakage of line count - - bug #4578 [security] XSS vulnerability in table print view - - bug #4579 [security] XSS vulnerability in zoom search page - - bug #4594 [security] Path traversal in file inclusion of GIS factory - - bug #4598 [security] XSS in multi submit - - bug #4597 [security] XSS through pma_fontsize cookie 4.2.11.0 (2014-10-31) - - bug ReferenceError: Table_onover is not defined - - bug #4552 Incorrect routines display for database due to case insensitive checks - - bug #4259 reCaptcha sound session expired problem - - bug #4557 PHP fatal error, undefined function __() - - bug #4568 Date displayed incorrectly when charting a timeline - - bug #4571 Database Privileges link does not work - - bug makegrid.js: where_clause is undefined - - bug #4572 missing trailing slash (import and open_basedir) Debdiff filtered from translations and generated changes is attached, it's diffstat is: ChangeLog | 33 ++++++++ README | 2 debian/changelog | 8 ++ import.php | 11 -- js/common.js | 4 - js/jquery/jquery.menuResizer-1.0.js | 3 js/makegrid.js | 3 js/rte.js | 6 + js/sql.js | 13 +++ js/tbl_chart.js | 4 - js/tbl_structure.js | 16 ++++ libraries/Config.class.php | 4 - libraries/DatabaseInterface.class.php | 3 libraries/DisplayResults.class.php | 19 +++- libraries/Header.class.php | 3 libraries/Theme.class.php | 2 libraries/Util.class.php | 18 ++++ libraries/core.lib.php | 8 +- libraries/display_export.lib.php | 8 +- libraries/error_report.lib.php | 15 +++ libraries/gis/GIS_Factory.class.php | 4 - libraries/mult_submits.lib.php | 7 + libraries/navigation/Nodes/Node_Database.class.php | 18 +++- libraries/navigation/Nodes/Node_Table.class.php | 12 ++- libraries/operations.lib.php | 8 +- libraries/plugins/auth/AuthenticationCookie.class.php | 11 +- libraries/relation.lib.php | 2 libraries/rte/rte_events.lib.php | 9 +- libraries/rte/rte_routines.lib.php | 9 +- libraries/sql.lib.php | 69 +++++++++++++----- libraries/structure.lib.php | 2 libraries/tbl_printview.lib.php | 2 libraries/tbl_tracking.lib.php | 2 pmd_general.php | 2 server_privileges.php | 2 tbl_export.php | 20 +++++ tbl_zoom_select.php | 2 37 files changed, 280 insertions(+), 84 deletions(-) Potentian unblock line: unblock phpmyadmin/4:4.2.12-1 Thanks - -- Michal Čihař | http://cihar.com | http://blog.cihar.com - -- System Information: Debian Release: jessie/sid APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: i386 (x86_64) Kernel: Linux 3.16.0-4-amd64 (SMP w/4 CPU cores) Locale: LANG=cs_CZ.utf8, LC_CTYPE=cs_CZ.utf8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBCAAGBQJUbvp1AAoJEJwnsxNCt1Edub0QAIzgiaQ70DxVmPZAoiRfZ1xR 8rYIGCdUP1+cg7RA9PHYbtry0GL/VJsiyizWnkBnMk97L1v369sK4TpC24l+f4/i ELjGTg95dGp7DBXwTV3eb0ASfWvY98PRtDFi8AX+M2ePdWmsCtO/nHe0JFrqV49M 4h3zxZ+mHxcgiZqLZNSnX+c+yv4e+qXJMUxdh1IXTMYjZ/2GNgAAwTfHN9eUF6Tj 49gcl4Vvr69dhQtjN0zpNZk6ebKnlc52xFlqkWKjttQ84I7i7eVdYX5Ir3rR+qhr GNZljkfX/dpS+rWzbjvJQUXaHm4ne+xOzcYwTdqcwkfxQx6byA7RklpNWZ5qSwsZ 24DSs6K//Ml2RmV7+rMjxRvZjk4kGO0cWa1mSVj9KbGpuMCAVZQ5al4pIHdwqHU1 1slHB7i0RzLpV4EekI3IYLPMn2VEflYfATJ7mLiyLGiI+RtpHW2YVpAObakrWuPN XJy+zGExzKwrbL7HVVBF9UvGbTvJ3dwXsAqkAQno+veQjFYt6Z18PJmBnO/WZ3Qq gJnV5ffYV4PEBeS6RI0CVL9xnmzloI9PSB7FPtSmOxQDLQytnMAnX3NXizU4CkPT 6SgJeV6utQzSe4DbcSSi6N4fMOdp11ljYZCWVA/1x54MQs5z5V+Tke1sMceAoFXF asA1vTnHCTX5tNNX5Zfn =yIU7 -----END PGP SIGNATURE-----
diff -Nru phpmyadmin-4.2.10.1/debian/changelog phpmyadmin-4.2.12/debian/changelog --- phpmyadmin-4.2.10.1/debian/changelog 2014-10-21 16:59:44.000000000 +0200 +++ phpmyadmin-4.2.12/debian/changelog 2014-11-20 17:12:57.000000000 +0100 @@ -1,3 +1,11 @@ +phpmyadmin (4:4.2.12-1) UNRELEASED; urgency=medium + + * New upstrem release. + - Fixes several security issues: CVE-2014-8958, CVE-2014-8959, + CVE-2014-8960, CVE-2014-8961. + + -- Michal Čihař <ni...@debian.org> Thu, 20 Nov 2014 17:10:03 +0100 + phpmyadmin (4:4.2.10.1-1) unstable; urgency=medium * New upstream release. diff -Nru phpmyadmin-4.2.10.1/ChangeLog phpmyadmin-4.2.12/ChangeLog --- phpmyadmin-4.2.10.1/ChangeLog 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/ChangeLog 2014-11-20 16:41:00.000000000 +0100 @@ -1,6 +1,37 @@ phpMyAdmin - ChangeLog ====================== +4.2.12.0 (2014-11-20) +- bug #4574 Blank/white page when JavaScript disabled +- bug #4577 Multi row actions cause full page reloads +- bug ReferenceError: targeurl is not defined +- bug Incorrect text/icon display in Tracking report +- bug #4404 Recordset return from procedure display nothing +- bug #4584 Edit dialog for routines is too long for smaller displays +- bug #4586 Javascript error after moving a column +- bug #4576 Issue with long comments on table columns +- bug #4599 Input field unnecessarily selected on focus +- bug #4602 Exporting selected rows exports all rows of the query +- bug #4444 No insert statement produced in SQL export for queries with alias +- bug #4603 Field disabled when internal relations used +- bug #4596 [security] XSS through exception stack +- bug #4595 [security] Path traversal can lead to leakage of line count +- bug #4578 [security] XSS vulnerability in table print view +- bug #4579 [security] XSS vulnerability in zoom search page +- bug #4594 [security] Path traversal in file inclusion of GIS factory +- bug #4598 [security] XSS in multi submit +- bug #4597 [security] XSS through pma_fontsize cookie + +4.2.11.0 (2014-10-31) +- bug ReferenceError: Table_onover is not defined +- bug #4552 Incorrect routines display for database due to case insensitive checks +- bug #4259 reCaptcha sound session expired problem +- bug #4557 PHP fatal error, undefined function __() +- bug #4568 Date displayed incorrectly when charting a timeline +- bug #4571 Database Privileges link does not work +- bug makegrid.js: where_clause is undefined +- bug #4572 missing trailing slash (import and open_basedir) + 4.2.10.1 (2014-10-21) - bug #4562 [security] XSS in debug SQL output - bug #4563 [security] XSS in monitor query analyzer @@ -11,7 +42,6 @@ - bug PDF export: title not present in PDF - bug #4543 Changing column name can break saved "order by" clause - bug #4545 trying to favorite table while browser localStorage is disabled throws JS error -- bug #4259 reCaptcha sound session expired problem - bug #4548 Inline editing a field converts tab to spaces - bug #4252 Database-level permission bug for db names containing underscores - bug #3120 Events are not exported when using xml @@ -276,7 +306,6 @@ - bug #4257 Hide fractional seconds when applicable - bug #4264 Uncheck "Ignore" while inserting, upon leaving a textarea - bug #4260 reCaptcha is ignoring language settings -- bug #4259 reCaptcha sound session expired problem - bug #4263 Japanese character encoding not working properly when exporting - bug #4269 Notice on table relation page - bug #4270 Bad text-color for table comments diff -Nru phpmyadmin-4.2.10.1/import.php phpmyadmin-4.2.12/import.php --- phpmyadmin-4.2.10.1/import.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/import.php 2014-11-20 16:41:00.000000000 +0100 @@ -373,19 +373,14 @@ // before opening it. if (! empty($open_basedir)) { - - /** - * @todo make use of the config's temp dir with fallback to the - * system's tmp dir - */ $tmp_subdir = ini_get('upload_tmp_dir'); if (empty($tmp_subdir)) { $tmp_subdir = sys_get_temp_dir(); } - + $tmp_subdir = rtrim($tmp_subdir, DIRECTORY_SEPARATOR); if (is_writable($tmp_subdir)) { - - $import_file_new = $tmp_subdir . basename($import_file) . uniqid(); + $import_file_new = $tmp_subdir . DIRECTORY_SEPARATOR + . basename($import_file) . uniqid(); if (move_uploaded_file($import_file, $import_file_new)) { $import_file = $import_file_new; $file_to_unlink = $import_file_new; diff -Nru phpmyadmin-4.2.10.1/js/common.js phpmyadmin-4.2.12/js/common.js --- phpmyadmin-4.2.10.1/js/common.js 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/js/common.js 2014-11-20 16:41:00.000000000 +0100 @@ -204,9 +204,9 @@ href != PMA_commonParams.get('pma_absolute_uri') + url ) { if (PMA_commonParams.get('safari_browser')) { - querywindow.location.href = targeturl; + querywindow.location.href = url; } else { - querywindow.location.replace(targeturl); + querywindow.location.replace(url); } querywindow.focus(); } diff -Nru phpmyadmin-4.2.10.1/js/jquery/jquery.menuResizer-1.0.js phpmyadmin-4.2.12/js/jquery/jquery.menuResizer-1.0.js --- phpmyadmin-4.2.10.1/js/jquery/jquery.menuResizer-1.0.js 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/js/jquery/jquery.menuResizer-1.0.js 2014-11-20 16:41:00.000000000 +0100 @@ -51,7 +51,8 @@ .removeClass('tabactive'); } }); - $container.children('.clearfloat').before($submenu); + $container.children('.clearfloat').remove(); + $container.append($submenu).append("<div class='clearfloat'></div>"); setTimeout(function () { self.resize(); }, 4); diff -Nru phpmyadmin-4.2.10.1/js/makegrid.js phpmyadmin-4.2.12/js/makegrid.js --- phpmyadmin-4.2.10.1/js/makegrid.js 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/js/makegrid.js 2014-11-20 16:41:00.000000000 +0100 @@ -1102,6 +1102,9 @@ $('td.to_be_saved').parents('tr').each(function () { var $tr = $(this); var where_clause = $tr.find('.where_clause').val(); + if (typeof where_clause === 'undefined') { + where_clause = ''; + } full_where_clause.push(PMA_urldecode(where_clause)); var condition_array = jQuery.parseJSON($tr.find('.condition_array').val()); diff -Nru phpmyadmin-4.2.10.1/js/rte.js phpmyadmin-4.2.12/js/rte.js --- phpmyadmin-4.2.10.1/js/rte.js 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/js/rte.js 2014-11-20 16:41:00.000000000 +0100 @@ -298,13 +298,17 @@ /** * Display the dialog to the user */ - that.$ajaxDialog = $('<div>' + data.message + '</div>').dialog({ + that.$ajaxDialog = $('<div id="rteDialog">' + data.message + '</div>').dialog({ width: 700, minWidth: 500, + maxHeight: $(window).height(), buttons: that.buttonOptions, title: data.title, modal: true, open: function () { + if ($('#rteDialog').parents('.ui-dialog').height() > $(window).height()) { + $('#rteDialog').dialog("option", "height", $(window).height()); + } $(this).find('input[name=item_name]').focus(); $(this).find('input.datefield').each(function () { PMA_addDatepicker($(this).css('width', '95%'), 'date'); diff -Nru phpmyadmin-4.2.10.1/js/sql.js phpmyadmin-4.2.12/js/sql.js --- phpmyadmin-4.2.10.1/js/sql.js 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/js/sql.js 2014-11-20 16:41:00.000000000 +0100 @@ -101,6 +101,7 @@ $('th.column_heading.marker').die('click'); $(window).unbind('scroll'); $(".filter_rows").die("keyup"); + $('body').off('click', '#resultsForm.ajax button[name="submit_mult"], #resultsForm.ajax input[name="submit_mult"]'); }); /** @@ -437,6 +438,18 @@ $target_table.find("th.dummy_th").remove(); }); // Filter row handling. --ENDS-- + + /** + * Handles mutli submits of results browsing page such as edit, delete and export + */ + $('body').on('click', '#resultsForm.ajax button[name="submit_mult"], #resultsForm.ajax input[name="submit_mult"]', function (e) { + e.preventDefault(); + var $button = $(this); + var $form = $button.parent('form'); + var submitData = $form.serialize() + '&ajax_request=true&ajax_page_request=true&submit_mult=' + $button.val(); + PMA_ajaxShowMessage(); + $.get($form.attr('action'), submitData, AJAX.responseHandler); + }); }); // end $() /** diff -Nru phpmyadmin-4.2.10.1/js/tbl_chart.js phpmyadmin-4.2.12/js/tbl_chart.js --- phpmyadmin-4.2.10.1/js/tbl_chart.js 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/js/tbl_chart.js 2014-11-20 16:41:00.000000000 +0100 @@ -17,12 +17,12 @@ matches = dateTimeRegExp.exec(dateString); if (matches !== null && matches.length > 0) { match = matches[0]; - return new Date(match.substr(0, 4), match.substr(5, 2), match.substr(8, 2), match.substr(11, 2), match.substr(14, 2), match.substr(17, 2)); + return new Date(match.substr(0, 4), parseInt(match.substr(5, 2), 10) - 1, match.substr(8, 2), match.substr(11, 2), match.substr(14, 2), match.substr(17, 2)); } else { matches = dateRegExp.exec(dateString); if (matches !== null && matches.length > 0) { match = matches[0]; - return new Date(match.substr(0, 4), match.substr(5, 2), match.substr(8, 2)); + return new Date(match.substr(0, 4), parseInt(match.substr(5, 2), 10) - 1, match.substr(8, 2)); } } return null; diff -Nru phpmyadmin-4.2.10.1/js/tbl_structure.js phpmyadmin-4.2.12/js/tbl_structure.js --- phpmyadmin-4.2.10.1/js/tbl_structure.js 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/js/tbl_structure.js 2014-11-20 16:41:00.000000000 +0100 @@ -78,6 +78,7 @@ $("a.add_unique_anchor.ajax").die('click'); $("#move_columns_anchor").die('click'); $(".append_fields_form.ajax").unbind('submit'); + $('body').off('click', '#fieldsForm.ajax button[name="submit_mult"], #fieldsForm.ajax input[name="submit_mult"]'); }); AJAX.registerOnload('tbl_structure.js', function () { @@ -500,6 +501,21 @@ } }); }); + + /** + * Handles mutli submits in table structure page such as browse, drop, primary etc. + * However this does not handle multiple field changes. It is handled by a seperate handler. + */ + $('body').on('click', '#fieldsForm.ajax button[name="submit_mult"], #fieldsForm.ajax input[name="submit_mult"]', function (e) { + var $button = $(this); + if (! $button.is('.change_columns_anchor.ajax')) { + e.preventDefault(); + var $form = $button.parent('form'); + var submitData = $form.serialize() + '&ajax_request=true&ajax_page_request=true&submit_mult=' + $button.val(); + PMA_ajaxShowMessage(); + $.get($form.attr('action'), submitData, AJAX.responseHandler); + } + }); }); /** Handler for "More" dropdown in structure table rows */ diff -Nru phpmyadmin-4.2.10.1/libraries/Config.class.php phpmyadmin-4.2.12/libraries/Config.class.php --- phpmyadmin-4.2.10.1/libraries/Config.class.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/Config.class.php 2014-11-20 16:41:00.000000000 +0100 @@ -114,7 +114,7 @@ */ function checkSystem() { - $this->set('PMA_VERSION', '4.2.10.1'); + $this->set('PMA_VERSION', '4.2.12'); /** * @deprecated */ @@ -1761,7 +1761,7 @@ // for the case when there is no config file (this is supported) if (empty($current_size)) { if (isset($_COOKIE['pma_fontsize'])) { - $current_size = $_COOKIE['pma_fontsize']; + $current_size = htmlspecialchars($_COOKIE['pma_fontsize']); } else { $current_size = '82%'; } diff -Nru phpmyadmin-4.2.10.1/libraries/core.lib.php phpmyadmin-4.2.12/libraries/core.lib.php --- phpmyadmin-4.2.10.1/libraries/core.lib.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/core.lib.php 2014-11-20 16:41:00.000000000 +0100 @@ -222,7 +222,13 @@ /* Load gettext for fatal errors */ if (!function_exists('__')) { - include_once GETTEXT_INC; + // It is possible that PMA_fatalError() is called before including vendor_config.php + // which defines GETTEXT_INC. See bug #4557 + if (defined(GETTEXT_INC)) { + include_once GETTEXT_INC; + } else { + include_once './libraries/php-gettext/gettext.inc'; + } } // these variables are used in the included file libraries/error.inc.php diff -Nru phpmyadmin-4.2.10.1/libraries/DatabaseInterface.class.php phpmyadmin-4.2.12/libraries/DatabaseInterface.class.php --- phpmyadmin-4.2.10.1/libraries/DatabaseInterface.class.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/DatabaseInterface.class.php 2014-11-20 16:41:00.000000000 +0100 @@ -1904,7 +1904,8 @@ . ', EVENT_OBJECT_TABLE, ACTION_TIMING, ACTION_STATEMENT' . ', EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE, DEFINER' . ' FROM information_schema.TRIGGERS' - . ' WHERE TRIGGER_SCHEMA= \'' . PMA_Util::sqlAddSlashes($db) . '\''; + . ' WHERE TRIGGER_SCHEMA ' . PMA_Util::getCollateForIS() . '=' + . ' \'' . PMA_Util::sqlAddSlashes($db) . '\''; if (! empty($table)) { $query .= " AND EVENT_OBJECT_TABLE = '" diff -Nru phpmyadmin-4.2.10.1/libraries/display_export.lib.php phpmyadmin-4.2.12/libraries/display_export.lib.php --- phpmyadmin-4.2.10.1/libraries/display_export.lib.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/display_export.lib.php 2014-11-20 16:41:00.000000000 +0100 @@ -136,12 +136,12 @@ . htmlspecialchars($cfg['Export']['method']) . '" />'; - if (isset($_GET['sql_query'])) { - $html .= '<input type="hidden" name="sql_query" value="' - . htmlspecialchars($_GET['sql_query']) . '" />' . "\n"; - } elseif (! empty($sql_query)) { + if (! empty($sql_query)) { $html .= '<input type="hidden" name="sql_query" value="' . htmlspecialchars($sql_query) . '" />' . "\n"; + } elseif (isset($_GET['sql_query'])) { + $html .= '<input type="hidden" name="sql_query" value="' + . htmlspecialchars($_GET['sql_query']) . '" />' . "\n"; } return $html; diff -Nru phpmyadmin-4.2.10.1/libraries/DisplayResults.class.php phpmyadmin-4.2.12/libraries/DisplayResults.class.php --- phpmyadmin-4.2.10.1/libraries/DisplayResults.class.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/DisplayResults.class.php 2014-11-20 16:41:00.000000000 +0100 @@ -1808,11 +1808,20 @@ && isset($comments_map[$fields_meta->table]) && isset($comments_map[$fields_meta->table][$fields_meta->name]) ) { - $comments = '<span class="tblcomment">' - . htmlspecialchars( - $comments_map[$fields_meta->table][$fields_meta->name] - ) - . '</span>'; + $sanitized_comments = htmlspecialchars( + $comments_map[$fields_meta->table][$fields_meta->name] + ); + + $comments = '<span class="tblcomment" title="' + . $sanitized_comments . '">'; + $limitChars = $GLOBALS['cfg']['LimitChars']; + if ($GLOBALS['PMA_String']->strlen($sanitized_comments) > $limitChars) { + $sanitized_comments = $GLOBALS['PMA_String']->substr( + $sanitized_comments, 0, $limitChars + ) . '…'; + } + $comments .= $sanitized_comments; + $comments .= '</span>'; } return $comments; } // end of the '_getCommentForRow()' function diff -Nru phpmyadmin-4.2.10.1/libraries/error_report.lib.php phpmyadmin-4.2.12/libraries/error_report.lib.php --- phpmyadmin-4.2.10.1/libraries/error_report.lib.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/error_report.lib.php 2014-11-20 16:41:00.000000000 +0100 @@ -177,6 +177,19 @@ return $LINE_COUNT[$filename]; } + // ensure that the file is inside the phpMyAdmin folder + $depath = 1; + foreach (explode('/', $filename) as $part) { + if ($part == '..') { + $depath--; + } elseif ($part != '.') { + $depath++; + } + if ($depath < 0) { + return 0; + } + } + $linecount = 0; $handle = fopen('./js/' . $filename, 'r'); while (!feof($handle)) { @@ -279,7 +292,7 @@ . __('You may examine the data in the error report:') . '</p></label></div>' . '<pre class="report-data">' - . PMA_getReportData() + . htmlspecialchars(PMA_getReportData()) . '</pre>'; $html .= '<div class="label"><label><p>' diff -Nru phpmyadmin-4.2.10.1/libraries/gis/GIS_Factory.class.php phpmyadmin-4.2.12/libraries/gis/GIS_Factory.class.php --- phpmyadmin-4.2.10.1/libraries/gis/GIS_Factory.class.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/gis/GIS_Factory.class.php 2014-11-20 16:41:00.000000000 +0100 @@ -33,7 +33,9 @@ include_once './libraries/gis/GIS_Geometry.class.php'; $type_lower = strtolower($type); - if (! file_exists('./libraries/gis/GIS_' . ucfirst($type_lower) . '.class.php')) { + if (! PMA_isValid($type_lower, PMA_Util::getGISDatatypes()) + || ! file_exists('./libraries/gis/GIS_' . ucfirst($type_lower) . '.class.php') + ) { return false; } if (include_once './libraries/gis/GIS_' . ucfirst($type_lower) . '.class.php') { diff -Nru phpmyadmin-4.2.10.1/libraries/Header.class.php phpmyadmin-4.2.12/libraries/Header.class.php --- phpmyadmin-4.2.10.1/libraries/Header.class.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/Header.class.php 2014-11-20 16:41:00.000000000 +0100 @@ -374,6 +374,9 @@ $this->_scripts->addFile('config.js'); } $retval .= $this->_scripts->getDisplay(); + $retval .= '<noscript>'; + $retval .= '<style>html{display:block}</style>'; + $retval .= '</noscript>'; $retval .= $this->_getBodyStart(); if ($this->_menuEnabled && $GLOBALS['server'] > 0) { $nav = new PMA_Navigation(); diff -Nru phpmyadmin-4.2.10.1/libraries/mult_submits.lib.php phpmyadmin-4.2.12/libraries/mult_submits.lib.php --- phpmyadmin-4.2.10.1/libraries/mult_submits.lib.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/mult_submits.lib.php 2014-11-20 16:41:00.000000000 +0100 @@ -554,13 +554,14 @@ foreach ($selected as $sval) { switch ($what) { case 'row_delete': - $full_query .= 'DELETE FROM ' . PMA_Util::backquote($db) - . '.' . PMA_Util::backquote($table) + $full_query .= 'DELETE FROM ' + . PMA_Util::backquote(htmlspecialchars($db)) + . '.' . PMA_Util::backquote(htmlspecialchars($table)) // Do not append a "LIMIT 1" clause here // (it's not binlog friendly). // We don't need the clause because the calling panel permits // this feature only when there is a unique index. - . ' WHERE ' . urldecode($sval) + . ' WHERE ' . urldecode(htmlspecialchars($sval)) . ';<br />'; break; case 'drop_db': diff -Nru phpmyadmin-4.2.10.1/libraries/navigation/Nodes/Node_Database.class.php phpmyadmin-4.2.12/libraries/navigation/Nodes/Node_Database.class.php --- phpmyadmin-4.2.10.1/libraries/navigation/Nodes/Node_Database.class.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/navigation/Nodes/Node_Database.class.php 2014-11-20 16:41:00.000000000 +0100 @@ -117,7 +117,8 @@ $db = PMA_Util::sqlAddSlashes($db); $query = "SELECT COUNT(*) "; $query .= "FROM `INFORMATION_SCHEMA`.`ROUTINES` "; - $query .= "WHERE `ROUTINE_SCHEMA`='$db'"; + $query .= "WHERE `ROUTINE_SCHEMA` " + . PMA_Util::getCollateForIS() . "='$db'"; $query .= "AND `ROUTINE_TYPE`='PROCEDURE' "; if (! empty($searchClause)) { if ($singleItem) { @@ -140,7 +141,8 @@ $db = PMA_Util::sqlAddSlashes($db); $query = "SELECT COUNT(*) "; $query .= "FROM `INFORMATION_SCHEMA`.`ROUTINES` "; - $query .= "WHERE `ROUTINE_SCHEMA`='$db' "; + $query .= "WHERE `ROUTINE_SCHEMA` " + . PMA_Util::getCollateForIS() . "='$db' "; $query .= "AND `ROUTINE_TYPE`='FUNCTION' "; if (! empty($searchClause)) { if ($singleItem) { @@ -163,7 +165,8 @@ $db = PMA_Util::sqlAddSlashes($db); $query = "SELECT COUNT(*) "; $query .= "FROM `INFORMATION_SCHEMA`.`EVENTS` "; - $query .= "WHERE `EVENT_SCHEMA`='$db' "; + $query .= "WHERE `EVENT_SCHEMA` " + . PMA_Util::getCollateForIS() . "='$db' "; if (! empty($searchClause)) { if ($singleItem) { $query .= "AND `EVENT_NAME` = '"; @@ -250,7 +253,8 @@ $escdDb = PMA_Util::sqlAddSlashes($db); $query = "SELECT `ROUTINE_NAME` AS `name` "; $query .= "FROM `INFORMATION_SCHEMA`.`ROUTINES` "; - $query .= "WHERE `ROUTINE_SCHEMA`='$escdDb'"; + $query .= "WHERE `ROUTINE_SCHEMA` " + . PMA_Util::getCollateForIS() . "='$escdDb'"; $query .= "AND `ROUTINE_TYPE`='PROCEDURE' "; if (! empty($searchClause)) { $query .= "AND `ROUTINE_NAME` LIKE '%"; @@ -267,7 +271,8 @@ $escdDb = PMA_Util::sqlAddSlashes($db); $query = "SELECT `ROUTINE_NAME` AS `name` "; $query .= "FROM `INFORMATION_SCHEMA`.`ROUTINES` "; - $query .= "WHERE `ROUTINE_SCHEMA`='$escdDb' "; + $query .= "WHERE `ROUTINE_SCHEMA` " + . PMA_Util::getCollateForIS() . "='$escdDb' "; $query .= "AND `ROUTINE_TYPE`='FUNCTION' "; if (! empty($searchClause)) { $query .= "AND `ROUTINE_NAME` LIKE '%"; @@ -284,7 +289,8 @@ $escdDb = PMA_Util::sqlAddSlashes($db); $query = "SELECT `EVENT_NAME` AS `name` "; $query .= "FROM `INFORMATION_SCHEMA`.`EVENTS` "; - $query .= "WHERE `EVENT_SCHEMA`='$escdDb' "; + $query .= "WHERE `EVENT_SCHEMA` " + . PMA_Util::getCollateForIS() . "='$escdDb' "; if (! empty($searchClause)) { $query .= "AND `EVENT_NAME` LIKE '%"; $query .= PMA_Util::sqlAddSlashes( diff -Nru phpmyadmin-4.2.10.1/libraries/navigation/Nodes/Node_Table.class.php phpmyadmin-4.2.12/libraries/navigation/Nodes/Node_Table.class.php --- phpmyadmin-4.2.10.1/libraries/navigation/Nodes/Node_Table.class.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/navigation/Nodes/Node_Table.class.php 2014-11-20 16:41:00.000000000 +0100 @@ -98,8 +98,10 @@ $table = PMA_Util::sqlAddSlashes($table); $query = "SELECT COUNT(*) "; $query .= "FROM `INFORMATION_SCHEMA`.`TRIGGERS` "; - $query .= "WHERE `EVENT_OBJECT_SCHEMA`='$db' "; - $query .= "AND `EVENT_OBJECT_TABLE`='$table'"; + $query .= "WHERE `EVENT_OBJECT_SCHEMA` " + . PMA_Util::getCollateForIS() . "='$db' "; + $query .= "AND `EVENT_OBJECT_TABLE` " + . PMA_Util::getCollateForIS() . "='$table'"; $retval = (int)$GLOBALS['dbi']->fetchValue($query); break; default: @@ -161,8 +163,10 @@ $table = PMA_Util::sqlAddSlashes($table); $query = "SELECT `TRIGGER_NAME` AS `name` "; $query .= "FROM `INFORMATION_SCHEMA`.`TRIGGERS` "; - $query .= "WHERE `EVENT_OBJECT_SCHEMA`='$db' "; - $query .= "AND `EVENT_OBJECT_TABLE`='$table' "; + $query .= "WHERE `EVENT_OBJECT_SCHEMA` " + . PMA_Util::getCollateForIS() . "='$db' "; + $query .= "AND `EVENT_OBJECT_TABLE` " + . PMA_Util::getCollateForIS() . "='$table' "; $query .= "ORDER BY `TRIGGER_NAME` ASC "; $query .= "LIMIT " . intval($pos) . ", $maxItems"; $retval = $GLOBALS['dbi']->fetchResult($query); diff -Nru phpmyadmin-4.2.10.1/libraries/operations.lib.php phpmyadmin-4.2.12/libraries/operations.lib.php --- phpmyadmin-4.2.10.1/libraries/operations.lib.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/operations.lib.php 2014-11-20 16:41:00.000000000 +0100 @@ -686,7 +686,7 @@ } $html_output .= ' <strong>.</strong> '; $html_output .= '<input class="halfWidth" type="text" size="20" name="new_name"' - . ' onfocus="this.select()" required="required" ' + . ' required="required" ' . 'value="' . htmlspecialchars($GLOBALS['table']) . '" /><br />'; // starting with MySQL 5.0.24, SHOW CREATE TABLE includes the AUTO_INCREMENT @@ -789,7 +789,7 @@ //Change table name $html_output .= '<tr><td>' . __('Rename table to') . '</td>' . '<td>' - . '<input type="text" size="20" name="new_name" onfocus="this.select()"' + . '<input type="text" size="20" name="new_name" ' . 'value="' . htmlspecialchars($GLOBALS['table']) . '" required="required" />' . '</td>' @@ -798,7 +798,7 @@ //Table comments $html_output .= '<tr><td>' . __('Table comments') . '</td>' . '<td><input type="text" name="comment" maxlength="60" size="30"' - . 'value="' . htmlspecialchars($comment) . '" onfocus="this.select()" />' + . 'value="' . htmlspecialchars($comment) . '" />' . '<input type="hidden" name="prev_comment" value="' . htmlspecialchars($comment) . '" />' . '</td>' @@ -1018,7 +1018,7 @@ } $html_output .= ' <strong>.</strong> '; $html_output .= '<input class="halfWidth" type="text" required="required" ' - . 'size="20" name="new_name" onfocus="this.select()" ' + . 'size="20" name="new_name" ' . 'value="' . htmlspecialchars($GLOBALS['table']) . '"/><br />'; $choices = array( diff -Nru phpmyadmin-4.2.10.1/libraries/plugins/auth/AuthenticationCookie.class.php phpmyadmin-4.2.12/libraries/plugins/auth/AuthenticationCookie.class.php --- phpmyadmin-4.2.10.1/libraries/plugins/auth/AuthenticationCookie.class.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/plugins/auth/AuthenticationCookie.class.php 2014-11-20 16:41:00.000000000 +0100 @@ -245,11 +245,12 @@ </noscript> <script type="text/javascript"> $(function() { - $("#recaptcha_reload_btn").addClass("disableAjax"); - $("#recaptcha_switch_audio_btn").addClass("disableAjax"); - $("#recaptcha_switch_img_btn").addClass("disableAjax"); - $("#recaptcha_whatsthis_btn").addClass("disableAjax"); - $("#recaptcha_audio_play_again").live("mouseover", function() { + $("#recaptcha_reload_btn," + + "#recaptcha_switch_audio_btn," + + "#recaptcha_switch_img_btn," + + "#recaptcha_whatsthis_btn," + + "#recaptcha_audio_play_again") + .live("mouseover", function() { $(this).addClass("disableAjax"); }); }); diff -Nru phpmyadmin-4.2.10.1/libraries/relation.lib.php phpmyadmin-4.2.12/libraries/relation.lib.php --- phpmyadmin-4.2.10.1/libraries/relation.lib.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/relation.lib.php 2014-11-20 16:41:00.000000000 +0100 @@ -1583,7 +1583,7 @@ $column_status['isReferenced'] = false; $column_status['isForeignKey'] = false; $column_status['references'] = array(); - $foreigners = PMA_getForeigners($db, $table, $column); + $foreigners = PMA_getForeigners($db, $table, $column, 'foreign'); $child_references = PMA_getChildReferences($db, $table, $column); if (sizeof($child_references, 0) > 0 diff -Nru phpmyadmin-4.2.10.1/libraries/rte/rte_events.lib.php phpmyadmin-4.2.12/libraries/rte/rte_events.lib.php --- phpmyadmin-4.2.10.1/libraries/rte/rte_events.lib.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/rte/rte_events.lib.php 2014-11-20 16:41:00.000000000 +0100 @@ -64,7 +64,8 @@ * Display a list of available events */ $columns = "`EVENT_NAME`, `EVENT_TYPE`, `STATUS`"; - $where = "EVENT_SCHEMA='" . PMA_Util::sqlAddSlashes($db) . "'"; + $where = "EVENT_SCHEMA " . PMA_Util::getCollateForIS() . "=" + . "'" . PMA_Util::sqlAddSlashes($db) . "'"; $query = "SELECT $columns FROM `INFORMATION_SCHEMA`.`EVENTS` " . "WHERE $where ORDER BY `EVENT_NAME` ASC;"; $items = $GLOBALS['dbi']->fetchResult($query); @@ -191,7 +192,8 @@ $response = PMA_Response::getInstance(); if ($message->isSuccess()) { $columns = "`EVENT_NAME`, `EVENT_TYPE`, `STATUS`"; - $where = "EVENT_SCHEMA='" . PMA_Util::sqlAddSlashes($db) . "' " + $where = "EVENT_SCHEMA " . PMA_Util::getCollateForIS() . "=" + . "'" . PMA_Util::sqlAddSlashes($db) . "' " . "AND EVENT_NAME='" . PMA_Util::sqlAddSlashes($_REQUEST['item_name']) . "'"; $query = "SELECT " . $columns @@ -325,7 +327,8 @@ $columns = "`EVENT_NAME`, `STATUS`, `EVENT_TYPE`, `EXECUTE_AT`, " . "`INTERVAL_VALUE`, `INTERVAL_FIELD`, `STARTS`, `ENDS`, " . "`EVENT_DEFINITION`, `ON_COMPLETION`, `DEFINER`, `EVENT_COMMENT`"; - $where = "EVENT_SCHEMA='" . PMA_Util::sqlAddSlashes($db) . "' " + $where = "EVENT_SCHEMA " . PMA_Util::getCollateForIS() . "=" + . "'" . PMA_Util::sqlAddSlashes($db) . "' " . "AND EVENT_NAME='" . PMA_Util::sqlAddSlashes($name) . "'"; $query = "SELECT $columns FROM `INFORMATION_SCHEMA`.`EVENTS` WHERE $where;"; $item = $GLOBALS['dbi']->fetchSingleRow($query); diff -Nru phpmyadmin-4.2.10.1/libraries/rte/rte_routines.lib.php phpmyadmin-4.2.12/libraries/rte/rte_routines.lib.php --- phpmyadmin-4.2.10.1/libraries/rte/rte_routines.lib.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/rte/rte_routines.lib.php 2014-11-20 16:41:00.000000000 +0100 @@ -55,7 +55,8 @@ */ $columns = "`SPECIFIC_NAME`, `ROUTINE_NAME`, `ROUTINE_TYPE`, "; $columns .= "`DTD_IDENTIFIER`, `ROUTINE_DEFINITION`"; - $where = "ROUTINE_SCHEMA='" . PMA_Util::sqlAddSlashes($db) . "'"; + $where = "ROUTINE_SCHEMA " . PMA_Util::getCollateForIS() . "=" + . "'" . PMA_Util::sqlAddSlashes($db) . "'"; if (PMA_isValid($type, array('FUNCTION','PROCEDURE'))) { $where .= " AND `ROUTINE_TYPE`='" . $type . "'"; } @@ -392,7 +393,8 @@ if ($message->isSuccess()) { $columns = "`SPECIFIC_NAME`, `ROUTINE_NAME`, `ROUTINE_TYPE`," . " `DTD_IDENTIFIER`, `ROUTINE_DEFINITION`"; - $where = "ROUTINE_SCHEMA='" . PMA_Util::sqlAddSlashes($db) . "' " + $where = "ROUTINE_SCHEMA " . PMA_Util::getCollateForIS() . "=" + . "'" . PMA_Util::sqlAddSlashes($db) . "' " . "AND ROUTINE_NAME='" . PMA_Util::sqlAddSlashes($_REQUEST['item_name']) . "'" . "AND ROUTINE_TYPE='" @@ -625,7 +627,8 @@ $fields = "SPECIFIC_NAME, ROUTINE_TYPE, DTD_IDENTIFIER, " . "ROUTINE_DEFINITION, IS_DETERMINISTIC, SQL_DATA_ACCESS, " . "ROUTINE_COMMENT, SECURITY_TYPE"; - $where = "ROUTINE_SCHEMA='" . PMA_Util::sqlAddSlashes($db) . "' " + $where = "ROUTINE_SCHEMA " . PMA_Util::getCollateForIS() . "=" + . "'" . PMA_Util::sqlAddSlashes($db) . "' " . "AND SPECIFIC_NAME='" . PMA_Util::sqlAddSlashes($name) . "'" . "AND ROUTINE_TYPE='" . PMA_Util::sqlAddSlashes($type) . "'"; $query = "SELECT $fields FROM INFORMATION_SCHEMA.ROUTINES WHERE $where;"; diff -Nru phpmyadmin-4.2.10.1/libraries/sql.lib.php phpmyadmin-4.2.12/libraries/sql.lib.php --- phpmyadmin-4.2.10.1/libraries/sql.lib.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/sql.lib.php 2014-11-20 16:41:00.000000000 +0100 @@ -1294,15 +1294,6 @@ $GLOBALS['querytime'] = $querytime_after - $querytime_before; - // If a stored procedure was called, there may be more results that are - // queued up and waiting to be flushed from the buffer. So let's do that. - do { - $GLOBALS['dbi']->storeResult(); - if (! $GLOBALS['dbi']->moreResults()) { - break; - } - } while ($GLOBALS['dbi']->nextResult()); - return $result; } @@ -1428,7 +1419,7 @@ false ); /** - * @todo Can we know at this point that this is InnoDB, + * @todo Can we know at this point that this is InnoDB, * (in this case there would be no need for getting * an exact count)? */ @@ -1437,7 +1428,7 @@ // is less than MaxExactCount /** * @todo In countRecords(), MaxExactCount is also verified, - * so can we avoid checking it twice? + * so can we avoid checking it twice? */ $unlim_num_rows = PMA_Table::countRecords( $db, @@ -1880,15 +1871,61 @@ $analyzed_sql_results ) { $printview = isset($_REQUEST['printview']) ? $_REQUEST['printview'] : null; - if (! empty($sql_data) && ($sql_data['valid_queries'] > 1) - || $analyzed_sql_results['is_procedure'] - ) { + $table_html = ''; + if (! empty($sql_data) && ($sql_data['valid_queries'] > 1)) { $_SESSION['is_multi_query'] = true; - $table_html = PMA_getTableHtmlForMultipleQueries( + $table_html .= PMA_getTableHtmlForMultipleQueries( $displayResultsObject, $db, $sql_data, $goto, $pmaThemeImage, $printview, $url_query, $disp_mode, $sql_limit_to_append, $editable ); + } elseif ($analyzed_sql_results['is_procedure']) { + + do { + if (! isset($result)) { + $result = $GLOBALS['dbi']->storeResult(); + } + $num_rows = $GLOBALS['dbi']->numRows($result); + + if ($result !== false && $num_rows > 0) { + + $fields_meta = $GLOBALS['dbi']->getFieldsMeta($result); + $fields_cnt = count($fields_meta); + + $displayResultsObject->setProperties( + $num_rows, + $fields_meta, + $analyzed_sql_results['is_count'], + $analyzed_sql_results['is_export'], + $analyzed_sql_results['is_func'], + $analyzed_sql_results['is_analyse'], + $num_rows, + $fields_cnt, + $GLOBALS['querytime'], + $pmaThemeImage, + $GLOBALS['text_dir'], + $analyzed_sql_results['is_maint'], + $analyzed_sql_results['is_explain'], + $analyzed_sql_results['is_show'], + $showtable, + $printview, + $url_query, + $editable + ); + + $disp_mode = 'nnnn110111'; // uneditable + $table_html .= $displayResultsObject->getTable( + $result, + $disp_mode, + $analyzed_sql_results['analyzed_sql'] + ); + } + + $GLOBALS['dbi']->freeResult($result); + unset($result); + + } while ($GLOBALS['dbi']->moreResults() && $GLOBALS['dbi']->nextResult()); + } else { if (isset($result) && $result) { $fields_meta = $GLOBALS['dbi']->getFieldsMeta($result); @@ -1905,7 +1942,7 @@ $editable ); - $table_html = $displayResultsObject->getTable( + $table_html .= $displayResultsObject->getTable( $result, $disp_mode, $analyzed_sql_results['analyzed_sql'] ); $GLOBALS['dbi']->freeResult($result); diff -Nru phpmyadmin-4.2.10.1/libraries/structure.lib.php phpmyadmin-4.2.12/libraries/structure.lib.php --- phpmyadmin-4.2.10.1/libraries/structure.lib.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/structure.lib.php 2014-11-20 16:41:00.000000000 +0100 @@ -2017,7 +2017,7 @@ ); } $html_output .= PMA_getHtmlForDistinctValueAction($url_query, $row, $titles); - $html_output .= '<div class="clearfloat"></div></ul></td>'; + $html_output .= '</ul></td>'; return $html_output; } diff -Nru phpmyadmin-4.2.10.1/libraries/tbl_printview.lib.php phpmyadmin-4.2.12/libraries/tbl_printview.lib.php --- phpmyadmin-4.2.10.1/libraries/tbl_printview.lib.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/tbl_printview.lib.php 2014-11-20 16:41:00.000000000 +0100 @@ -107,7 +107,7 @@ $html .= ' ' . $field_name . "\n"; } $html .= '</td>'; - $html .= '<td>' . $type . '<bdo dir="ltr"></bdo></td>'; + $html .= '<td>' . htmlspecialchars($type) . '<bdo dir="ltr"></bdo></td>'; $html .= '<td>'; $html .= (($row['Null'] == '' || $row['Null'] == 'NO') ? __('No') diff -Nru phpmyadmin-4.2.10.1/libraries/tbl_tracking.lib.php phpmyadmin-4.2.12/libraries/tbl_tracking.lib.php --- phpmyadmin-4.2.10.1/libraries/tbl_tracking.lib.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/tbl_tracking.lib.php 2014-11-20 16:41:00.000000000 +0100 @@ -364,7 +364,7 @@ // Prepare delete link content here $drop_image_or_text = ''; - if (PMA_Util::showIcons('ActionsLinksMode')) { + if (PMA_Util::showIcons('ActionLinksMode')) { $drop_image_or_text .= PMA_Util::getImage( 'b_drop.png', __('Delete tracking data row from report') ); diff -Nru phpmyadmin-4.2.10.1/libraries/Theme.class.php phpmyadmin-4.2.12/libraries/Theme.class.php --- phpmyadmin-4.2.10.1/libraries/Theme.class.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/Theme.class.php 2014-11-20 16:41:00.000000000 +0100 @@ -434,7 +434,7 @@ return $fs; } if (isset($_COOKIE['pma_fontsize'])) { - return $_COOKIE['pma_fontsize']; + return htmlspecialchars($_COOKIE['pma_fontsize']); } return '82%'; } diff -Nru phpmyadmin-4.2.10.1/libraries/Util.class.php phpmyadmin-4.2.12/libraries/Util.class.php --- phpmyadmin-4.2.10.1/libraries/Util.class.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/libraries/Util.class.php 2014-11-20 16:41:00.000000000 +0100 @@ -4380,6 +4380,24 @@ } return 'none'; } + + /** + * Provide COLLATE clause, if required, to perfrom case sensitice comparisons + * for queries on information_schema. + * + * @return string COLLATE clause if needed or empty string. + */ + public static function getCollateForIS() + { + $lowerCaseTableNames = $GLOBALS['dbi']->fetchValue( + "SHOW VARIABLES LIKE 'lower_case_table_names'", 0, 1 + ); + + if ($lowerCaseTableNames === '0') { + return "COLLATE utf8_bin"; + } + return ""; + } } ?> diff -Nru phpmyadmin-4.2.10.1/pmd_general.php phpmyadmin-4.2.12/pmd_general.php --- phpmyadmin-4.2.10.1/pmd_general.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/pmd_general.php 2014-11-20 16:41:00.000000000 +0100 @@ -283,7 +283,7 @@ onclick="Start_tab_upd('<?php echo $GLOBALS['PMD_URL']["TABLE_NAME_SMALL"][$i]; ?>');"> <img src="<?php echo $_SESSION['PMA_Theme']->getImgPath('pmd/exec_small.png'); ?>" alt="" /></td> <td id="id_zag_<?php echo $t_n_url ?>" class="tab_zag nowrap" - onmousedown="cur_click=document.getElementById('<?php echo $t_n_url ?>');"/ + onmousedown="cur_click=document.getElementById('<?php echo $t_n_url ?>');" onmouseover="Table_onover('<?php echo $t_n_url ?>',0,<?php echo (isset($_REQUEST['query'])? 1 : 0 )?> )" onmouseout="Table_onover('<?php echo $t_n_url ?>',1,<?php echo (isset($_REQUEST['query']) ? 1 : 0 )?>)"> <span class='owner'> diff -Nru phpmyadmin-4.2.10.1/README phpmyadmin-4.2.12/README --- phpmyadmin-4.2.10.1/README 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/README 2014-11-20 16:41:00.000000000 +0100 @@ -1,7 +1,7 @@ phpMyAdmin - Readme =================== -Version 4.2.10.1 +Version 4.2.12 A set of PHP-scripts to manage MySQL over the web. diff -Nru phpmyadmin-4.2.10.1/server_privileges.php phpmyadmin-4.2.12/server_privileges.php --- phpmyadmin-4.2.10.1/server_privileges.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/server_privileges.php 2014-11-20 16:41:00.000000000 +0100 @@ -290,7 +290,7 @@ * Displays the links */ if (isset($_REQUEST['viewing_mode']) && $_REQUEST['viewing_mode'] == 'db') { - $_REQUEST['db'] = $_REQUEST['checkprivsdb']; + $GLOBALS['db'] = $_REQUEST['db'] = $_REQUEST['checkprivsdb']; $url_query .= '&goto=db_operations.php'; diff -Nru phpmyadmin-4.2.10.1/tbl_export.php phpmyadmin-4.2.12/tbl_export.php --- phpmyadmin-4.2.10.1/tbl_export.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/tbl_export.php 2014-11-20 16:41:00.000000000 +0100 @@ -38,6 +38,26 @@ // Need to generate WHERE clause? if (isset($where_clause)) { + // If a table alias is used, get rid of it since + // where clauses are on real table name + if ($analyzed_sql[0]['table_ref'][0]['table_alias']) { + // Exporting seleted rows is only allowed for queries involving + // a single table. So we can safely assume that there is only one + // table in 'table_ref' array. + $temp_sql_array = preg_split('/\bfrom\b/i', $sql_query); + $sql_query = $temp_sql_array[0] . 'FROM '; + if (! empty($analyzed_sql[0]['table_ref'][0]['db'])) { + $sql_query .= PMA_Util::backquote( + $analyzed_sql[0]['table_ref'][0]['db'] + ); + $sql_query .= '.'; + } + $sql_query .= PMA_Util::backquote( + $analyzed_sql[0]['table_ref'][0]['table_name'] + ); + } + unset($temp_sql_array); + // Regular expressions which can appear in sql query, // before the sql segment which remains as it is. $regex_array = array( diff -Nru phpmyadmin-4.2.10.1/tbl_zoom_select.php phpmyadmin-4.2.12/tbl_zoom_select.php --- phpmyadmin-4.2.10.1/tbl_zoom_select.php 2014-10-21 16:43:10.000000000 +0200 +++ phpmyadmin-4.2.12/tbl_zoom_select.php 2014-11-20 16:41:00.000000000 +0100 @@ -81,7 +81,7 @@ } $key = array_search($field, $table_search->getColumnNames()); $properties = $table_search->getColumnProperties($_REQUEST['it'], $key); - $response->addJSON('field_type', $properties['type']); + $response->addJSON('field_type', htmlspecialchars($properties['type'])); $response->addJSON('field_collation', $properties['collation']); $response->addJSON('field_operators', $properties['func']); $response->addJSON('field_value', $properties['value']);