From c724073960af20805c60d873d94a0c38de958847 Mon Sep 17 00:00:00 2001 From: Robert Treat Date: Tue, 26 Mar 2013 13:56:45 -0400 Subject: [PATCH] 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. --- classes/Misc.php | 4 ++++ classes/database/Postgres.php | 3 ++- classes/database/Postgres84.php | 2 ++ libraries/adodb/drivers/adodb-postgres64.inc.php | 3 +++ 4 files changed, 11 insertions(+), 1 deletion(-) 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]); -- 2.39.5