summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-02-21 13:38:29 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2020-02-21 13:39:05 +0100
commit3e1ac7e968a62e7e7a02eef81ac06701842b141d (patch)
treedaccaa0f016cf7697f317e770436c4612885b0ad
parent363d87f2568044bce53b0dd625609130646cea0f (diff)
parent2a76e3a4571a7e31905a569580682e68cc003abb (diff)
downloadphp-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.h1
-rw-r--r--ext/sqlite3/sqlite3.c5
-rw-r--r--ext/sqlite3/tests/bug79294.phpt34
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)