cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo/tests bug_38253.phpt

From: Date: Sun, 30 Jul 2006 11:20:41 +0000
Subject: cvs: php-src /ext/pdo pdo_stmt.c /ext/pdo/tests bug_38253.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-39651@lists.php.net to get a copy of this message
tony2001 Sun Jul 30 11:20:41 2006 UTC Modified files: /php-src/ext/pdo pdo_stmt.c /php-src/ext/pdo/tests bug_38253.phpt Log: MFB: bug #38253 (PDO produces segfault with default fetch mode) add test http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.160&r2=1.161&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.160 php-src/ext/pdo/pdo_stmt.c:1.161 --- php-src/ext/pdo/pdo_stmt.c:1.160 Tue Jun 20 13:25:54 2006 +++ php-src/ext/pdo/pdo_stmt.c Sun Jul 30 11:20:40 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_stmt.c,v 1.160 2006/06/20 13:25:54 tony2001 Exp $ */ +/* $Id: pdo_stmt.c,v 1.161 2006/07/30 11:20:40 tony2001 Exp $ */ /* The PDO Statement Handle Class */ @@ -842,6 +842,10 @@ zval_dtor(&val); } ce = stmt->fetch.cls.ce; + if (!ce) { + pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "No fetch class specified" TSRMLS_CC); + return 0; + } if ((flags & PDO_FETCH_SERIALIZE) == 0) { object_init_ex(return_value, ce); if (!stmt->fetch.cls.fci.size) { @@ -883,6 +887,10 @@ break; case PDO_FETCH_FUNC: + if (!stmt->fetch.func.function) { + pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "No fetch function specified" TSRMLS_CC); + return 0; + } if (!stmt->fetch.func.fci.size) { if (!do_fetch_func_prepare(stmt TSRMLS_CC)) { http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/tests/bug_38253.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/pdo/tests/bug_38253.phpt diff -u /dev/null php-src/ext/pdo/tests/bug_38253.phpt:1.2 --- /dev/null Sun Jul 30 11:20:41 2006 +++ php-src/ext/pdo/tests/bug_38253.phpt Sun Jul 30 11:20:41 2006 @@ -0,0 +1,47 @@ +--TEST-- +PDO Common: PHP Bug #38253: PDO produces segfault with default fetch mode +--SKIPIF-- +<?php # vim:ft=php +if (!extension_loaded('pdo')) die('skip'); +$dir = getenv('REDIR_TEST_DIR'); +if (false == $dir) die('skip no driver'); +require_once $dir . 'pdo_test.inc'; +PDOTest::skip(); +?> +--FILE-- +<?php +if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/'); +require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc'; +$pdo = PDOTest::factory(); + +$pdo->exec ("create table test (id integer primary key, n text)"); +$pdo->exec ("INSERT INTO test (n) VALUES ('hi')"); + +$pdo->setAttribute (PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_CLASS); +$stmt = $pdo->prepare ("SELECT * FROM test"); +$stmt->execute(); +var_dump($stmt->fetchAll()); + +$pdo = PDOTest::factory(); + +$pdo->exec ("create table test2 (id integer primary key, n text)"); +$pdo->exec ("INSERT INTO test2 (n) VALUES ('hi')"); + +$pdo->setAttribute (PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_FUNC); +$stmt = $pdo->prepare ("SELECT * FROM test2"); +$stmt->execute(); +var_dump($stmt->fetchAll()); + +?> +--EXPECTF-- +Warning: PDOStatement::fetchAll(): SQLSTATE[HY000]: General error: No fetch class specified in %s on line %d + +Warning: PDOStatement::fetchAll(): SQLSTATE[HY000]: General error%s on line %d +array(0) { +} + +Warning: PDOStatement::fetchAll(): SQLSTATE[HY000]: General error: No fetch function specified in %s on line %d + +Warning: PDOStatement::fetchAll(): SQLSTATE[HY000]: General error%s on line %d +array(0) { +}

« previous php.cvs (#39651) next »