diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2020-02-21 13:37:14 +0100 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2020-02-21 13:37:31 +0100 |
commit | 2a76e3a4571a7e31905a569580682e68cc003abb (patch) | |
tree | 2ed139553087ca9aa14737855ea3fe83b3cac83e /ext/sqlite3 | |
parent | 5a5680c25b3e6d758cc25268c89e0ceb04147ad7 (diff) | |
parent | f133f0024ec801dc9636ee5bf84a93de1300d4b2 (diff) | |
download | php-git-2a76e3a4571a7e31905a569580682e68cc003abb.tar.gz |
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
Fix #79294: ::columnType() may fail after SQLite3Stmt::reset()
Diffstat (limited to 'ext/sqlite3')
-rw-r--r-- | ext/sqlite3/php_sqlite3_structs.h | 2 | ||||
-rw-r--r-- | ext/sqlite3/sqlite3.c | 5 | ||||
-rw-r--r-- | ext/sqlite3/tests/bug79294.phpt | 34 |
3 files changed, 36 insertions, 5 deletions
diff --git a/ext/sqlite3/php_sqlite3_structs.h b/ext/sqlite3/php_sqlite3_structs.h index f189ea30af..3de8aac0d4 100644 --- a/ext/sqlite3/php_sqlite3_structs.h +++ b/ext/sqlite3/php_sqlite3_structs.h @@ -108,7 +108,7 @@ struct _php_sqlite3_result_object { zval stmt_obj_zval; int is_prepared_statement; - int complete; + int complete; // unused zend_object zo; }; diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c index 910181a3b7..3a3ade7bc3 100644 --- a/ext/sqlite3/sqlite3.c +++ b/ext/sqlite3/sqlite3.c @@ -1983,7 +1983,7 @@ PHP_METHOD(sqlite3result, columnType) return; } - if (result_obj->complete) { + if (!sqlite3_data_count(result_obj->stmt_obj->stmt)) { RETURN_FALSE; } @@ -2038,7 +2038,6 @@ PHP_METHOD(sqlite3result, fetchArray) break; case SQLITE_DONE: - result_obj->complete = 1; RETURN_FALSE; break; @@ -2066,8 +2065,6 @@ PHP_METHOD(sqlite3result, reset) RETURN_FALSE; } - result_obj->complete = 0; - RETURN_TRUE; } /* }}} */ diff --git a/ext/sqlite3/tests/bug79294.phpt b/ext/sqlite3/tests/bug79294.phpt new file mode 100644 index 0000000000..5538e3886b --- /dev/null +++ b/ext/sqlite3/tests/bug79294.phpt @@ -0,0 +1,34 @@ +--TEST-- +Bug #79294 ()::columnType() may fail after SQLite3Stmt::reset()) +--SKIPIF-- +<?php +if (!extension_loaded('sqlite3')) die('sqlite3 extension not available'); +?> +--FILE-- +<?php +$db = new SQLite3(':memory:'); +$db->exec("CREATE TABLE foo (bar INT)"); +$db->exec("INSERT INTO foo VALUES (1)"); + +$stmt = $db->prepare("SELECT * FROM foo"); +$res = $stmt->execute(); +var_dump($res->fetchArray() !== false); +var_dump($res->columnType(0)); +var_dump($res->fetchArray() !== false); +var_dump($res->columnType(0)); +$stmt->reset(); +var_dump($res->fetchArray() !== false); +var_dump($res->columnType(0)); +$res->reset(); +var_dump($res->fetchArray() !== false); +var_dump($res->columnType(0)); +?> +--EXPECT-- +bool(true) +int(1) +bool(false) +bool(false) +bool(true) +int(1) +bool(true) +int(1) |