Fix GH-17837: ::getColumnMeta() on unexecuted statement segfaults

We cannot properly get the column meta data of a statement which has
been prepared, but has not yet been executed.  As such we bail out
early, reporting failure.

Closes GH-17850.
This commit is contained in:
Christoph M. Becker 2025-02-18 13:45:31 +01:00
parent 86f5a31e5b
commit 260e0e9bd3
No known key found for this signature in database
GPG key ID: D66C9593118BCCB6
3 changed files with 19 additions and 1 deletions

4
NEWS
View file

@ -40,6 +40,10 @@ PHP NEWS
JIT crash). (nielsdos)
. Fixed bug GH-17577 (JIT packed type guard crash). (nielsdos, Dmitry)
- PDO_SQLite:
. Fixed GH-17837 ()::getColumnMeta() on unexecuted statement segfaults).
(cmb)
- Phar:
. Fixed bug GH-17808: PharFileInfo refcount bug. (nielsdos)

View file

@ -305,7 +305,7 @@ static int pdo_sqlite_stmt_col_meta(pdo_stmt_t *stmt, zend_long colno, zval *ret
const char *str;
zval flags;
if (!S->stmt) {
if (!S->stmt || !stmt->executed) {
return FAILURE;
}
if(colno >= sqlite3_column_count(S->stmt)) {

View file

@ -0,0 +1,14 @@
--TEST--
GH-17837 (::getColumnMeta() on unexecuted statement segfaults)
--EXTENSIONS--
pdo_sqlite
--CREDITS--
YuanchengJiang
--FILE--
<?php
$db = new PDO('sqlite::memory:');
$stmt = $db->prepare('select :a, :b, ?');
var_dump($stmt->getColumnMeta(0));
?>
--EXPECT--
bool(false)