From 19653de7643be609235bf29f6211edd24cb68edb Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Tue, 6 Feb 2018 16:05:39 +0100 Subject: [PATCH] PostgreSQL: Unescape bytea fields --- adminer/download.inc.php | 2 +- adminer/drivers/pgsql.inc.php | 12 ++++++++++++ adminer/include/driver.inc.php | 11 ++++++++++- adminer/select.inc.php | 1 + changes.txt | 2 +- 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/adminer/download.inc.php b/adminer/download.inc.php index b1aea655..9afe554c 100644 --- a/adminer/download.inc.php +++ b/adminer/download.inc.php @@ -6,5 +6,5 @@ header("Content-Disposition: attachment; filename=" . friendly_url("$TABLE-" . i $select = array(idf_escape($_GET["field"])); $result = $driver->select($TABLE, $select, array(where($_GET, $fields)), $select); $row = ($result ? $result->fetch_row() : array()); -echo $row[0]; +echo $driver->value($row[0], $fields[$_GET["field"]]); exit; // don't output footer diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index 02baec0d..b8f40bc4 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -40,6 +40,10 @@ if (isset($_GET["pgsql"])) { return "'" . pg_escape_string($this->_link, $string) . "'"; } + function value($val, $field) { + return ($field["type"] == "bytea" ? pg_unescape_bytea($val) : $val); + } + function quoteBinary($string) { return "'" . pg_escape_bytea($this->_link, $string) . "'"; } @@ -151,6 +155,10 @@ if (isset($_GET["pgsql"])) { return ($adminer->database() == $database); } + function value($val, $field) { + return $val; + } + function quoteBinary($s) { return q($s); } @@ -196,6 +204,10 @@ if (isset($_GET["pgsql"])) { ); } + function value($val, $field) { + return $this->_conn->value($val, $field); + } + function quoteBinary($s) { return $this->_conn->quoteBinary($s); } diff --git a/adminer/include/driver.inc.php b/adminer/include/driver.inc.php index 6e35b4fa..1a4e86ea 100644 --- a/adminer/include/driver.inc.php +++ b/adminer/include/driver.inc.php @@ -122,7 +122,16 @@ function convertSearch($idf, $val, $field) { return $idf; } - + + /** Convert value returned by database to actual value + * @param string + * @param array + * @return string + */ + function value($val, $field) { + return $val; + } + /** Quote binary string * @param string * @return string diff --git a/adminer/select.inc.php b/adminer/select.inc.php index 328602d3..f165d1a2 100644 --- a/adminer/select.inc.php +++ b/adminer/select.inc.php @@ -391,6 +391,7 @@ if (!$columns && support("table")) { foreach ($row as $key => $val) { if (isset($names[$key])) { $field = $fields[$key]; + $val = $driver->value($val, $field); if ($val != "" && (!isset($email_fields[$key]) || $email_fields[$key] != "")) { $email_fields[$key] = (is_mail($val) ? $names[$key] : ""); //! filled e-mails can be contained on other pages } diff --git a/changes.txt b/changes.txt index 47e4c91c..87cfb485 100644 --- a/changes.txt +++ b/changes.txt @@ -1,7 +1,7 @@ Adminer 4.6.1-dev: MySQL: Support non-utf8 charset in search in column MySQL: Support geometry in MySQL 8 (bug #574) -PostgreSQL: Upload binary files to bytea fields +PostgreSQL: Support binary files in bytea fields PostgreSQL: Cast to string when searching using LIKE (bug #325) PostgreSQL: Don't treat interval type as number (bug #474) PostgreSQL: Fix condition for selecting no rows