From: Pierrick Charron Date: Tue, 27 Apr 2010 05:56:56 +0000 (+0000) Subject: Fixed bug #51670 getColumnMeta causes segfault when re-executing query after calling... X-Git-Tag: php-5.3.3RC1~260 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8f128b2b13bef025ce756397d659e0d1e078bd29;p=php Fixed bug #51670 getColumnMeta causes segfault when re-executing query after calling nextRowset --- diff --git a/NEWS b/NEWS index 8e3edf0bc8..808725476b 100644 --- a/NEWS +++ b/NEWS @@ -21,7 +21,9 @@ PHP NEWS characters. Reported by Stefan Esser (Ilia) - Fixed a NULL pointer dereference when processing invalid XML-RPC requests (Fixes CVE-2010-0397, bug #51288). (Raphael Geissert) -- Fixed 64-bit integer overflow in mhash_keygen_s2k(). (Clément LECIGNE, Stas) +- Fixed 64-bit integer overflow in mhash_keygen_s2k(). (Clément LECIGNE, Stas) +- Fixed bug #51670 (getColumnMeta causes segfault when re-executing query + after calling nextRowset). (Pierrick) - Fixed bug #51647 Certificate file without private key (pk in another file) doesn't work. (Andrey) - Fixed bug #51629 (CURLOPT_FOLLOWLOCATION error message is misleading). diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index f12bfb793a..5ac2c7ac2d 100755 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -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 index 0000000000..d5387e6c6f --- /dev/null +++ b/ext/pdo_mysql/tests/bug_51670.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #51670 (getColumnMeta causes segfault when re-executing query after calling nextRowset) +--SKIPIF-- + +--FILE-- +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! +