diff --git a/adminer/sql.inc.php b/adminer/sql.inc.php index 090d3e5a..eb0510a5 100644 --- a/adminer/sql.inc.php +++ b/adminer/sql.inc.php @@ -63,19 +63,19 @@ if (!$error && $_POST) { } else { preg_match('(' . preg_quote($delimiter) . "|$parse)", $query, $match, PREG_OFFSET_CAPTURE, $offset); // should always match $found = $match[0][0]; - $offset = $match[0][1] + strlen($found); if (!$found && $fp && !feof($fp)) { $query .= fread($fp, 1e5); } else { + $offset = $match[0][1] + strlen($found); if (!$found && rtrim($query) == "") { break; } if ($found && $found != $delimiter) { // find matching quote or comment end while (preg_match('(' . ($found == '/*' ? '\\*/' : ($found == '[' ? ']' : (ereg('^-- |^#', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES $s = $match[0][0]; - $offset = $match[0][1] + strlen($s); + $offset = $match[0][1] + ($s ? strlen($s) : -strlen($found)); // strlen($found) is higher than length of longest pattern minus one if (!$s && $fp && !feof($fp)) { - $query .= fread($fp, 1e6); + $query .= fread($fp, 1e5); } elseif ($s[0] != "\\") { break; } diff --git a/changes.txt b/changes.txt index cf1fc49a..592cfd69 100644 --- a/changes.txt +++ b/changes.txt @@ -1,5 +1,6 @@ Adminer 3.3.2-dev: Display error with non-existent row in edit +Fix minor parser bug in SQL command with webserver file Don't scroll with AJAX select order and alter move column Fast number of rows with big tables (PostgreSQL) Sort databases and schemas (PostgreSQL)