From: Anatol Belski Date: Wed, 1 Jun 2016 09:52:46 +0000 (+0200) Subject: Add test for bug #72294 X-Git-Tag: php-7.0.8RC1~13 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=79b978db9a9fd129366818968b203d50b983f596;p=php Add test for bug #72294 --- diff --git a/ext/pdo_pgsql/tests/bug72294.phpt b/ext/pdo_pgsql/tests/bug72294.phpt new file mode 100644 index 0000000000..d6bb661733 --- /dev/null +++ b/ext/pdo_pgsql/tests/bug72294.phpt @@ -0,0 +1,149 @@ +--TEST-- +Bug #72294 Segmentation fault/invalid pointer in connection with pgsql_stmt_dtor +--SKIPIF-- + +--FILE-- +run($this); + } + + public function runBare() + { + $class = new ReflectionClass($this); + $method = $class->getMethod($this->name); + $method->invoke($this); + + if( $x ) { + } + } + + public function setName($name) + { + $this->name = $name; + } +} + +class PHPUnit_Framework_TestFailure +{ + private $testName; + + protected $failedTest; + + protected $thrownException; + + public function __construct( $failedTest, $t) + { + if ($failedTest instanceof PHPUnit_Framework_SelfDescribing) { + $this->testName = $failedTest->toString(); + } else { + $this->testName = get_class($failedTest); + } + + $this->thrownException = $t; + } +} + +class PHPUnit_Framework_TestResult +{ + public function run( $test) + { + $error = false; + + $oldErrorHandler = set_error_handler( + 'handleError', + E_ALL | E_STRICT + ); + + try { + $test->runBare(); + } catch (RuntimeException $e) { + $error = true; + } + + restore_error_handler(); + + if ($error === true) { + $this->errors[] = new PHPUnit_Framework_TestFailure($test, $e); + } + } +} + +$result = new PHPUnit_Framework_TestResult(); + +class PreparedStatementCache +{ + private $cached_statements = array(); + + public function prepare( $pdo, $sql ) + { + //return $pdo->prepare( $sql ); + $this->cached_statements[$sql] = $pdo->prepare( $sql ); + + return $this->cached_statements[$sql]; + } +} + +class DatabaseTest extends PHPUnit_Framework_TestCase +{ + public function testIt() + { + $pdo = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt'); + + $prepared_statement_cache = new PreparedStatementCache( $pdo ); + + for( $i = 1; $i <= 300; ++$i ) { + $statement = $prepared_statement_cache->prepare( $pdo, <<execute(); + } + } + + public function test_construct() + { + $pdo = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt'); + + $pdo->exec( 'CREATE TEMPORARY TABLE temp_table ( test_column INT NOT NULL );' ); + + $this->cache = new PreparedStatementCache( $pdo ); + + $statement = $this->cache->prepare( $pdo, 'SELECT * FROM temp_table WHERE test_column > 0' ); + $statement->execute(); + } +} + +$test = new DatabaseTest(); +$test->setName( 'testIt' ); +$test->run( $result ); +$test->setName( 'test_construct' ); +$test->run( $result ); + +?> +==NOCRASH== +--EXPECT-- +==NOCRASH== +