summaryrefslogtreecommitdiff
path: root/ext/pdo_pgsql/pgsql_statement.c
diff options
context:
space:
mode:
authorMatteo Beccati <mbeccati@php.net>2009-12-25 20:09:08 +0000
committerMatteo Beccati <mbeccati@php.net>2009-12-25 20:09:08 +0000
commit37960040c1d70c934e7c4604a745624c2431be13 (patch)
tree1831e6d56c0db36b6f815825b4c70b3b49fb114d /ext/pdo_pgsql/pgsql_statement.c
parentdea44657798223aad3ad5cb4ed36641ebe804dd1 (diff)
downloadphp-git-37960040c1d70c934e7c4604a745624c2431be13.tar.gz
- Fixed bug #50575 (PDO_PGSQL LOBs are not compatible with PostgreSQL 8.5)
# Affects 5.2 only, no need to MFB
Diffstat (limited to 'ext/pdo_pgsql/pgsql_statement.c')
-rw-r--r--ext/pdo_pgsql/pgsql_statement.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/ext/pdo_pgsql/pgsql_statement.c b/ext/pdo_pgsql/pgsql_statement.c
index fbfdde1c07..9985b2a253 100644
--- a/ext/pdo_pgsql/pgsql_statement.c
+++ b/ext/pdo_pgsql/pgsql_statement.c
@@ -472,6 +472,24 @@ static int pgsql_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC)
*/
static unsigned char *php_pdo_pgsql_unescape_bytea(unsigned char *strtext, size_t *retbuflen)
{
+#ifdef HAVE_PQUNESCAPEBYTEA
+ size_t tmp_len;
+ char *buffer;
+ char *tmp_ptr = PQunescapeBytea(strtext, &tmp_len);
+
+ if (!tmp_ptr) {
+ /* PQunescapeBytea returned an error, this
+ function will return en empty string */
+ tmp_len = 0;
+ buffer = emalloc(0);
+ } else {
+ buffer = emalloc(tmp_len);
+ memcpy(buffer, tmp_ptr, tmp_len);
+ PQfreemem(tmp_ptr);
+ }
+ *retbuflen = tmp_len;
+ return buffer;
+#else
size_t buflen;
unsigned char *buffer,
*sp,
@@ -480,6 +498,7 @@ static unsigned char *php_pdo_pgsql_unescape_bytea(unsigned char *strtext, size_
if (strtext == NULL)
return NULL;
+
buflen = strlen(strtext); /* will shrink, also we discover if
* strtext */
buffer = (unsigned char *) emalloc(buflen); /* isn't NULL terminated */
@@ -549,6 +568,7 @@ static unsigned char *php_pdo_pgsql_unescape_bytea(unsigned char *strtext, size_
*retbuflen = buflen;
return buffer;
+#endif
}
static int pgsql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned long *len, int *caller_frees TSRMLS_DC)