Skip to content

Commit 2a76e3a

Browse files
committed
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Fix #79294: ::columnType() may fail after SQLite3Stmt::reset()
2 parents 5a5680c + f133f00 commit 2a76e3a

File tree

4 files changed

+39
-5
lines changed

4 files changed

+39
-5
lines changed

NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ PHP NEWS
3232
- PDO_ODBC:
3333
. Fixed bug #79038 (PDOStatement::nextRowset() leaks column values). (cmb)
3434

35+
- SQLite3:
36+
. Fixed bug #79294 (::columnType() may fail after SQLite3Stmt::reset()). (cmb)
37+
3538
- Standard:
3639
. Fixed bug #79254 (getenv() w/o arguments not showing changes). (cmb)
3740

ext/sqlite3/php_sqlite3_structs.h

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

110110
int is_prepared_statement;
111-
int complete;
111+
int complete; // unused
112112
zend_object zo;
113113
};
114114

ext/sqlite3/sqlite3.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1983,7 +1983,7 @@ PHP_METHOD(sqlite3result, columnType)
19831983
return;
19841984
}
19851985

1986-
if (result_obj->complete) {
1986+
if (!sqlite3_data_count(result_obj->stmt_obj->stmt)) {
19871987
RETURN_FALSE;
19881988
}
19891989

@@ -2038,7 +2038,6 @@ PHP_METHOD(sqlite3result, fetchArray)
20382038
break;
20392039

20402040
case SQLITE_DONE:
2041-
result_obj->complete = 1;
20422041
RETURN_FALSE;
20432042
break;
20442043

@@ -2066,8 +2065,6 @@ PHP_METHOD(sqlite3result, reset)
20662065
RETURN_FALSE;
20672066
}
20682067

2069-
result_obj->complete = 0;
2070-
20712068
RETURN_TRUE;
20722069
}
20732070
/* }}} */

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)