summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Treat2013-03-26 17:56:45 +0000
committerRobert Treat2013-03-26 17:56:45 +0000
commitc724073960af20805c60d873d94a0c38de958847 (patch)
treef0ff02d5fcd299a229a7b5503834ca065d91c114
parente7c81cfb4b89398d6accbd2b0f0af3c8507c9666 (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.php4
-rwxr-xr-xclasses/database/Postgres.php3
-rwxr-xr-xclasses/database/Postgres84.php2
-rw-r--r--libraries/adodb/drivers/adodb-postgres64.inc.php3
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]);