diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2020-02-21 13:38:29 +0100 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2020-02-21 13:39:05 +0100 |
commit | 3e1ac7e968a62e7e7a02eef81ac06701842b141d (patch) | |
tree | daccaa0f016cf7697f317e770436c4612885b0ad | |
parent | 363d87f2568044bce53b0dd625609130646cea0f (diff) | |
parent | 2a76e3a4571a7e31905a569580682e68cc003abb (diff) | |
download | php-git-3e1ac7e968a62e7e7a02eef81ac06701842b141d.tar.gz |
Merge branch 'PHP-7.4'
* PHP-7.4:
Fix #79294: ::columnType() may fail after SQLite3Stmt::reset()
-rw-r--r-- | ext/sqlite3/php_sqlite3_structs.h | 1 | ||||
-rw-r--r-- | ext/sqlite3/sqlite3.c | 5 | ||||
-rw-r--r-- | ext/sqlite3/tests/bug79294.phpt | 34 |
3 files changed, 35 insertions, 5 deletions
diff --git a/ext/sqlite3/php_sqlite3_structs.h b/ext/sqlite3/php_sqlite3_structs.h index d86f39e431..80e915da68 100644 --- a/ext/sqlite3/php_sqlite3_structs.h +++ b/ext/sqlite3/php_sqlite3_structs.h @@ -108,7 +108,6 @@ struct _php_sqlite3_result_object { zval stmt_obj_zval; int is_prepared_statement; - int complete; zend_object zo; }; diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c index 812758433d..0d5fc6de08 100644 --- a/ext/sqlite3/sqlite3.c +++ b/ext/sqlite3/sqlite3.c @@ -2004,7 +2004,7 @@ PHP_METHOD(sqlite3result, columnType) RETURN_THROWS(); } - if (result_obj->complete) { + if (!sqlite3_data_count(result_obj->stmt_obj->stmt)) { RETURN_FALSE; } @@ -2059,7 +2059,6 @@ PHP_METHOD(sqlite3result, fetchArray) break; case SQLITE_DONE: - result_obj->complete = 1; RETURN_FALSE; break; @@ -2087,8 +2086,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) |