]> granicus.if.org Git - php/commitdiff
Fixed bug #51670 getColumnMeta causes segfault when re-executing query after calling...
authorPierrick Charron <pierrick@php.net>
Tue, 27 Apr 2010 05:56:56 +0000 (05:56 +0000)
committerPierrick Charron <pierrick@php.net>
Tue, 27 Apr 2010 05:56:56 +0000 (05:56 +0000)
ext/pdo/pdo_stmt.c
ext/pdo_mysql/tests/bug_51670.phpt [new file with mode: 0644]

index 49199e7f730b6eb0dcb4042ce077548a770f2c9d..1213722bcad5350759a44c4bdea50d884035a840 100755 (executable)
@@ -2080,6 +2080,8 @@ static int pdo_stmt_do_next_rowset(pdo_stmt_t *stmt TSRMLS_DC)
        }
 
        if (!stmt->methods->next_rowset(stmt TSRMLS_CC)) {
+               /* Set the executed flag to 0 to reallocate columns on next execute */
+               stmt->executed = 0;
                return 0;
        }
 
diff --git a/ext/pdo_mysql/tests/bug_51670.phpt b/ext/pdo_mysql/tests/bug_51670.phpt
new file mode 100644 (file)
index 0000000..d5387e6
--- /dev/null
@@ -0,0 +1,24 @@
+--TEST--
+Bug #51670 (getColumnMeta causes segfault when re-executing query after calling nextRowset)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded');
+require dirname(__FILE__) . '/config.inc';
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+$query = $db->prepare('SELECT 1 AS num');
+$query->execute();
+if(!is_array($query->getColumnMeta(0))) die('FAIL!');
+$query->nextRowset();
+$query->execute();
+if(!is_array($query->getColumnMeta(0))) die('FAIL!');
+echo 'done!';
+?>
+--EXPECTF--
+done!
+