mbeccati                Thu Apr 23 13:26:10 2009 UTC

  Added files:                 (Branch: PHP_5_3)
    /php-src/ext/pdo_oci/tests  bug46274.phpt bug46274_2.phpt 

  Modified files:              
    /php-src    NEWS 
    /php-src/ext/pdo    pdo_stmt.c 
    /php-src/ext/pdo_pgsql      pgsql_statement.c 
    /php-src/ext/pdo_pgsql/tests        bug46274_2.phpt 
  Log:
  MFH:
  - Reverted previous fix for bug #46274 and properly fixed it
  - Fixed bug #48060
  # Also added tests for pdo_oci as it's the only other driver currently
  # using streams: no regression found
  
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.566&r2=1.2027.2.547.2.965.2.567&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.965.2.566 
php-src/NEWS:1.2027.2.547.2.965.2.567
--- php-src/NEWS:1.2027.2.547.2.965.2.566       Tue Apr 21 08:12:07 2009
+++ php-src/NEWS        Thu Apr 23 13:26:09 2009
@@ -12,6 +12,7 @@
   disable this behaviour using "http"=>array("auto_decode"=>0) in stream
   context. (Dmitry)
 
+- Fixed bug #48060 (pdo_pgsql - large objects are returned as empty). (Matteo)
 - Fixed bug #48023 (spl_autoload_register didn't store closures). (Etienne)
 - Fixed bug #48004 (Error handler prevents creation of default object).
   (Dmitry)
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.118.2.38.2.24.2.45&r2=1.118.2.38.2.24.2.46&diff_format=u
Index: php-src/ext/pdo/pdo_stmt.c
diff -u php-src/ext/pdo/pdo_stmt.c:1.118.2.38.2.24.2.45 
php-src/ext/pdo/pdo_stmt.c:1.118.2.38.2.24.2.46
--- php-src/ext/pdo/pdo_stmt.c:1.118.2.38.2.24.2.45     Thu Apr  2 16:41:23 2009
+++ php-src/ext/pdo/pdo_stmt.c  Thu Apr 23 13:26:09 2009
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_stmt.c,v 1.118.2.38.2.24.2.45 2009/04/02 16:41:23 mbeccati Exp $ */
+/* $Id: pdo_stmt.c,v 1.118.2.38.2.24.2.46 2009/04/23 13:26:09 mbeccati Exp $ */
 
 /* The PDO Statement Handle Class */
 
@@ -589,9 +589,8 @@
                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;
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_pgsql/pgsql_statement.c?r1=1.31.2.12.2.7.2.9&r2=1.31.2.12.2.7.2.10&diff_format=u
Index: php-src/ext/pdo_pgsql/pgsql_statement.c
diff -u php-src/ext/pdo_pgsql/pgsql_statement.c:1.31.2.12.2.7.2.9 
php-src/ext/pdo_pgsql/pgsql_statement.c:1.31.2.12.2.7.2.10
--- php-src/ext/pdo_pgsql/pgsql_statement.c:1.31.2.12.2.7.2.9   Sat Mar 28 
02:58:04 2009
+++ php-src/ext/pdo_pgsql/pgsql_statement.c     Thu Apr 23 13:26:10 2009
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pgsql_statement.c,v 1.31.2.12.2.7.2.9 2009/03/28 02:58:04 mbeccati Exp 
$ */
+/* $Id: pgsql_statement.c,v 1.31.2.12.2.7.2.10 2009/04/23 13:26:10 mbeccati 
Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -619,8 +619,14 @@
                                        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:
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_pgsql/tests/bug46274_2.phpt?r1=1.1.2.1&r2=1.1.2.2&diff_format=u
Index: php-src/ext/pdo_pgsql/tests/bug46274_2.phpt
diff -u php-src/ext/pdo_pgsql/tests/bug46274_2.phpt:1.1.2.1 
php-src/ext/pdo_pgsql/tests/bug46274_2.phpt:1.1.2.2
--- php-src/ext/pdo_pgsql/tests/bug46274_2.phpt:1.1.2.1 Sun Oct 12 13:01:31 2008
+++ php-src/ext/pdo_pgsql/tests/bug46274_2.phpt Thu Apr 23 13:26:10 2009
@@ -47,11 +47,13 @@
 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 @@
 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

http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_oci/tests/bug46274.phpt?view=markup&rev=1.1
Index: php-src/ext/pdo_oci/tests/bug46274.phpt
+++ php-src/ext/pdo_oci/tests/bug46274.phpt
--TEST--
Bug #46274 (pdo_pgsql - Segfault when using PDO::ATTR_STRINGIFY_FETCHES and 
blob)
--SKIPIF--
<?php
if (!extension_loaded('pdo') || !extension_loaded('pdo_oci')) 
die('skip not loaded');
require dirname(__FILE__).'/../../pdo/tests/pdo_test.inc';
PDOTest::skip();
?>
--FILE--
<?php
require 'ext/pdo/tests/pdo_test.inc';
$db = PDOTest::test_factory('ext/pdo_oci/tests/common.phpt');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);

try {
        $db->exec("DROP TABLE test_one_blob");
} catch (Exception $e) {
}

$db->beginTransaction();

$db->query('CREATE TABLE test_one_blob (id INT NOT NULL, blob1 BLOB)');

$stmt = $db->prepare("INSERT INTO test_one_blob (id, blob1) VALUES (:id, 
EMPTY_BLOB()) RETURNING blob1 INTO :foo");

$data = 'foo';
$blob = fopen('php://memory', 'a');
fwrite($blob, $data);
rewind($blob);

$id = 1;
$stmt->bindparam(':id', $id);
$stmt->bindparam(':foo', $blob, PDO::PARAM_LOB);
$stmt->execute();

$data = '';
$blob = fopen('php://memory', 'a');
fwrite($blob, $data);
rewind($blob);

$id = 1;
$stmt->bindparam(':id', $id);
$stmt->bindparam(':foo', $blob, PDO::PARAM_LOB);
$stmt->execute();

$res = $db->query("SELECT blob1 from test_one_blob");
// Resource
var_dump($res->fetch());

// Empty string
var_dump($res->fetch());

$db->exec("DROP TABLE test_one_blob");

?>
--EXPECTF--
array(2) {
  ["blob1"]=>
  string(3) "foo"
  [0]=>
  string(3) "foo"
}
array(2) {
  ["blob1"]=>
  string(0) ""
  [0]=>
  string(0) ""
}

http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_oci/tests/bug46274_2.phpt?view=markup&rev=1.1
Index: php-src/ext/pdo_oci/tests/bug46274_2.phpt
+++ php-src/ext/pdo_oci/tests/bug46274_2.phpt
--TEST--
Bug #46274 (pdo_pgsql - Segfault when using PDO::ATTR_STRINGIFY_FETCHES and 
blob)
--SKIPIF--
<?php
if (!extension_loaded('pdo') || !extension_loaded('pdo_oci')) 
die('skip not loaded');
require dirname(__FILE__).'/../../pdo/tests/pdo_test.inc';
PDOTest::skip();
?>
--FILE--
<?php
require 'ext/pdo/tests/pdo_test.inc';
$db = PDOTest::test_factory('ext/pdo_oci/tests/common.phpt');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

try {
        $db->exec("DROP TABLE test_one_blob");
} catch (Exception $e) {
}

$db->beginTransaction();

$db->query('CREATE TABLE test_one_blob (id INT NOT NULL, blob1 BLOB)');

$stmt = $db->prepare("INSERT INTO test_one_blob (id, blob1) VALUES (:id, 
EMPTY_BLOB()) RETURNING blob1 INTO :foo");

$data = 'foo';
$blob = fopen('php://memory', 'a');
fwrite($blob, $data);
rewind($blob);

$id = 1;
$stmt->bindparam(':id', $id);
$stmt->bindparam(':foo', $blob, PDO::PARAM_LOB);
$stmt->execute();

$data = '';
$blob = fopen('php://memory', 'a');
fwrite($blob, $data);
rewind($blob);

$id = 1;
$stmt->bindparam(':id', $id);
$stmt->bindparam(':foo', $blob, PDO::PARAM_LOB);
$stmt->execute();

$res = $db->query("SELECT blob1 from test_one_blob");
// Resource
var_dump($row = $res->fetch());
var_dump(fread($row[0], 1024));
fclose($row[0]);

// Empty string
var_dump($row = $res->fetch());
var_dump(fread($row[0], 1024));
fclose($row[0]);

$db->exec("DROP TABLE test_one_blob");

?>
--EXPECTF--
array(2) {
  ["blob1"]=>
  resource(%d) of type (stream)
  [0]=>
  resource(%d) of type (stream)
}
string(3) "foo"
array(2) {
  ["blob1"]=>
  resource(%d) of type (stream)
  [0]=>
  resource(%d) of type (stream)
}
string(0) ""



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to