diff options
| author | Robert Treat | 2013-03-26 17:56:45 +0000 |
|---|---|---|
| committer | Robert Treat | 2013-03-26 17:56:45 +0000 |
| commit | c724073960af20805c60d873d94a0c38de958847 (patch) | |
| tree | f0ff02d5fcd299a229a7b5503834ca065d91c114 | |
| parent | e7c81cfb4b89398d6accbd2b0f0af3c8507c9666 (diff) | |
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.
| -rw-r--r-- | classes/Misc.php | 4 | ||||
| -rwxr-xr-x | classes/database/Postgres.php | 3 | ||||
| -rwxr-xr-x | classes/database/Postgres84.php | 2 | ||||
| -rw-r--r-- | libraries/adodb/drivers/adodb-postgres64.inc.php | 3 |
4 files changed, 11 insertions, 1 deletions
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]); |
