From: Robert Treat Date: Tue, 26 Mar 2013 17:56:45 +0000 (-0400) Subject: Fix incorrect modification of bytea data when updating rows that contain bytea columns. X-Git-Tag: REL_5-1-0~12 X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=c724073960af20805c60d873d94a0c38de958847;p=phppgadmin.git Fix incorrect modification of bytea data when updating rows that contain bytea columns. Based on the POC patch from ioguix. This fixes SF Bug # 3243916. --- diff --git a/classes/Misc.php b/classes/Misc.php index a9b7d685..0457b4d8 100644 --- a/classes/Misc.php +++ b/classes/Misc.php @@ -505,6 +505,10 @@ /* we work on UTF-8 only encoding */ $data->execute("SET client_encoding TO 'UTF-8'"); + if ($data->hasByteaHexDefault()) { + $data->execute("SET bytea_output TO escape"); + } + return $data; } diff --git a/classes/database/Postgres.php b/classes/database/Postgres.php index b9737733..5dc2479d 100755 --- a/classes/database/Postgres.php +++ b/classes/database/Postgres.php @@ -230,7 +230,7 @@ class Postgres extends ADODB_base { * @return Data formatted for on-screen display */ function escapeBytea($data) { - return stripslashes(pg_escape_bytea($data)); + return $data; } /** @@ -7987,6 +7987,7 @@ class Postgres extends ADODB_base { function hasQueryKill() { return true; } function hasConcurrentIndexBuild() { return true; } function hasForceReindex() { return false; } + function hasByteaHexDefault() { return true; } } ?> diff --git a/classes/database/Postgres84.php b/classes/database/Postgres84.php index 7b255288..bc2b2b34 100755 --- a/classes/database/Postgres84.php +++ b/classes/database/Postgres84.php @@ -224,6 +224,8 @@ class Postgres84 extends Postgres90 { // Capabilities + function hasByteaHexDefault() { return false; } + } ?> diff --git a/libraries/adodb/drivers/adodb-postgres64.inc.php b/libraries/adodb/drivers/adodb-postgres64.inc.php index 5597d515..6846303a 100644 --- a/libraries/adodb/drivers/adodb-postgres64.inc.php +++ b/libraries/adodb/drivers/adodb-postgres64.inc.php @@ -956,6 +956,9 @@ class ADORecordSet_postgres64 extends ADORecordSet{ function _fixblobs() { + + return; # bypass adodb's bytea handling, so we can handle it ourselves within PHP + if ($this->fetchMode == PGSQL_NUM || $this->fetchMode == PGSQL_BOTH) { foreach($this->_blobArr as $k => $v) { $this->fields[$k] = ADORecordSet_postgres64::_decode($this->fields[$k]);