From: jakubvrana Date: Wed, 26 Aug 2009 14:27:12 +0000 (+0000) Subject: Unlock session if possible X-Git-Tag: v3.0.0~504 X-Git-Url: https://git.joonet.de/?a=commitdiff_plain;h=c93a4f99404af50e906757677949e4d65da2d3eb;p=adminer.git Unlock session if possible git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@1024 7c3ca157-0c34-0410-bff1-cbf682f78f5c --- diff --git a/adminer/sql.inc.php b/adminer/sql.inc.php index 8f45b485..16ae107a 100644 --- a/adminer/sql.inc.php +++ b/adminer/sql.inc.php @@ -15,13 +15,18 @@ if (!$error && $_POST) { $query = get_file("sql_file"); } if (is_string($query)) { // get_file() returns error as number, file_get_contents as false + $space = "(\\s|/\\*.*\\*/|(#|-- )[^\n]*\n|--\n)"; + $alter_database = "(CREATE|DROP)$space+(DATABASE|SCHEMA)\\b~isU"; + $databases = &$_SESSION["databases"][$_GET["server"]]; + if (isset($databases) && !preg_match("~\\b$alter_database", $query)) { // quick check - may be inside string + session_write_close(); + } if (strlen($query) && (!$history || end($history) != $query)) { // don't add repeated $history[] = $query; } $delimiter = ";"; $offset = 0; $empty = true; - $space = "(\\s|/\\*.*\\*/|(#|-- )[^\n]*\n|--\n)"; $dbh2 = (strlen($_GET["db"]) ? connect() : null); // connection for exploring indexes (to not replace FOUND_ROWS()) //! PDO - silent error if (is_object($dbh2)) { $dbh2->select_db($_GET["db"]); @@ -61,8 +66,8 @@ if (!$error && $_POST) { if (is_object($result)) { select($result, $dbh2); } else { - if (preg_match("~^$space*(CREATE|DROP)$space+(DATABASE|SCHEMA)\\b~isU", $query)) { - unset($_SESSION["databases"][$_GET["server"]]); // clear cache + if (preg_match("~^$space*$alter_database", $query)) { + $databases = null; // clear cache } echo "

" . lang('Query executed OK, %d row(s) affected.', $dbh->affected_rows) . "\n"; }