]> granicus.if.org Git - php/commitdiff
MFH
authorMatteo Beccati <mbeccati@php.net>
Thu, 3 Sep 2009 22:53:25 +0000 (22:53 +0000)
committerMatteo Beccati <mbeccati@php.net>
Thu, 3 Sep 2009 22:53:25 +0000 (22:53 +0000)
- Fixed bug #48060 (pdo_pgsql - large objects are returned as empty)
# Backported from 5.3.0, per gripe from Konstantin Ryabitsev
# Permission granted by Ilia

NEWS
ext/pdo/pdo_stmt.c
ext/pdo_pgsql/pgsql_statement.c
ext/pdo_pgsql/tests/bug46274_2.phpt

diff --git a/NEWS b/NEWS
index b1c1af05e8252984d5ddda608b7e9c43e2529bb6..ebcee5eb0f33e47f1cc991b8f8d7ce53cd404a24 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 0? Sep 2009, PHP 5.2.11
+- Fixed bug #48060 (pdo_pgsql - large objects are returned as empty). (Matteo)
 
 
 03 Sep 2009, PHP 5.2.11RC2
index d5c618ea0b3963aa7430292ee432216a2c765554..136f82d47b702ae9c3a1f2ed9f1608cf89f1b989 100755 (executable)
@@ -587,9 +587,8 @@ static inline void fetch_value(pdo_stmt_t *stmt, zval *dest, int colno, int *typ
                case PDO_PARAM_LOB:
                        if (value == NULL) {
                                ZVAL_NULL(dest);
-                       } else if (value[0] == '\0') {
-                               ZVAL_EMPTY_STRING(dest);
                        } else if (value_len == 0) {
+                               /* Warning, empty strings need to be passed as stream */
                                if (stmt->dbh->stringify || new_type == PDO_PARAM_STR) {
                                        char *buf = NULL;
                                        size_t len;
index a8910698813880bc7495ceabc10fa1624b7ea8eb..ce53d849225deb7d59f75407377e543470bc372d 100644 (file)
@@ -599,8 +599,14 @@ static int pgsql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned
                                        return 0;
                                } else {
                                        *ptr = php_pdo_pgsql_unescape_bytea(*ptr, &tmp_len);
-                                       *len = tmp_len;
-                                       *caller_frees = 1;
+                                       if (!tmp_len) {
+                                               /* Empty string, return as empty stream */
+                                               *ptr = (char *)php_stream_memory_open(TEMP_STREAM_READONLY, "", 0);
+                                               *len = 0;
+                                       } else {
+                                               *len = tmp_len;
+                                               *caller_frees = 1;
+                                       }
                                }
                                break;
                        case PDO_PARAM_NULL:
index 5e355568803d7dcdd1fbfd725684b10a8422e033..eb675afe9e5f26540e05ac390d6c44b46049001a 100644 (file)
@@ -47,11 +47,13 @@ $res = $db->query("SELECT blob1 from test_one_blob");
 var_dump($x = $res->fetch());
 var_dump(fread($x['blob1'], 10));
 
-// Empty string
+// Resource
 var_dump($res->fetch());
+var_dump(fread($x['blob1'], 10));
 
-// Empty string
+// Resource
 var_dump($res->fetch());
+var_dump(fread($x['blob1'], 10));
 
 // NULL
 var_dump($res->fetch());
@@ -69,16 +71,18 @@ array(2) {
 string(3) "foo"
 array(2) {
   ["blob1"]=>
-  string(0) ""
+  resource(%d) of type (stream)
   [0]=>
-  string(0) ""
+  resource(%d) of type (stream)
 }
+string(0) ""
 array(2) {
   ["blob1"]=>
-  string(0) ""
+  resource(%d) of type (stream)
   [0]=>
-  string(0) ""
+  resource(%d) of type (stream)
 }
+string(0) ""
 array(2) {
   ["blob1"]=>
   NULL