Skip to content

Commit 3e1ac7e

Browse files
committed
Merge branch 'PHP-7.4'
* PHP-7.4: Fix #79294: ::columnType() may fail after SQLite3Stmt::reset()
2 parents 363d87f + 2a76e3a commit 3e1ac7e

File tree

3 files changed

+35
-5
lines changed

3 files changed

+35
-5
lines changed

ext/sqlite3/php_sqlite3_structs.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ struct _php_sqlite3_result_object {
108108
zval stmt_obj_zval;
109109

110110
int is_prepared_statement;
111-
int complete;
112111
zend_object zo;
113112
};
114113

ext/sqlite3/sqlite3.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2004,7 +2004,7 @@ PHP_METHOD(sqlite3result, columnType)
20042004
RETURN_THROWS();
20052005
}
20062006

2007-
if (result_obj->complete) {
2007+
if (!sqlite3_data_count(result_obj->stmt_obj->stmt)) {
20082008
RETURN_FALSE;
20092009
}
20102010

@@ -2059,7 +2059,6 @@ PHP_METHOD(sqlite3result, fetchArray)
20592059
break;
20602060

20612061
case SQLITE_DONE:
2062-
result_obj->complete = 1;
20632062
RETURN_FALSE;
20642063
break;
20652064

@@ -2087,8 +2086,6 @@ PHP_METHOD(sqlite3result, reset)
20872086
RETURN_FALSE;
20882087
}
20892088

2090-
result_obj->complete = 0;
2091-
20922089
RETURN_TRUE;
20932090
}
20942091
/* }}} */

ext/sqlite3/tests/bug79294.phpt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
--TEST--
2+
Bug #79294 ()::columnType() may fail after SQLite3Stmt::reset())
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded('sqlite3')) die('sqlite3 extension not available');
6+
?>
7+
--FILE--
8+
<?php
9+
$db = new SQLite3(':memory:');
10+
$db->exec("CREATE TABLE foo (bar INT)");
11+
$db->exec("INSERT INTO foo VALUES (1)");
12+
13+
$stmt = $db->prepare("SELECT * FROM foo");
14+
$res = $stmt->execute();
15+
var_dump($res->fetchArray() !== false);
16+
var_dump($res->columnType(0));
17+
var_dump($res->fetchArray() !== false);
18+
var_dump($res->columnType(0));
19+
$stmt->reset();
20+
var_dump($res->fetchArray() !== false);
21+
var_dump($res->columnType(0));
22+
$res->reset();
23+
var_dump($res->fetchArray() !== false);
24+
var_dump($res->columnType(0));
25+
?>
26+
--EXPECT--
27+
bool(true)
28+
int(1)
29+
bool(false)
30+
bool(false)
31+
bool(true)
32+
int(1)
33+
bool(true)
34+
int(1)

0 commit comments

Comments
 (0)