Skip to content

Commit 43b0c8a

Browse files
author
Ilia Alshanetsky
committed
Fixed a crash inside sqlite_array_query() when invalid query
is specified.
1 parent c70f036 commit 43b0c8a

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

ext/sqlite/sqlite.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -972,8 +972,11 @@ void sqlite_query(struct php_sqlite_db *db, char *sql, long sql_len, int mode, i
972972
if (ret != SQLITE_OK) {
973973
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext);
974974
sqlite_freemem(errtext);
975-
976-
RETURN_FALSE;
975+
if (return_value) {
976+
RETURN_FALSE;
977+
} else {
978+
return;
979+
}
977980
}
978981

979982
if (!rres) {
@@ -987,7 +990,11 @@ void sqlite_query(struct php_sqlite_db *db, char *sql, long sql_len, int mode, i
987990
/* now the result set is ready for stepping: get first row */
988991
if (php_sqlite_fetch(rres TSRMLS_CC) != SQLITE_OK) {
989992
real_result_dtor(rres TSRMLS_CC);
990-
RETURN_FALSE;
993+
if (return_value) {
994+
RETURN_FALSE;
995+
} else {
996+
return;
997+
}
991998
}
992999

9931000
rres->curr_row = 0;
@@ -1276,6 +1283,10 @@ PHP_FUNCTION(sqlite_array_query)
12761283

12771284
rres = (struct php_sqlite_result *)emalloc(sizeof(*rres));
12781285
sqlite_query(db, sql, sql_len, mode, 0, NULL, rres TSRMLS_CC);
1286+
if (db->last_err_code != SQLITE_OK) {
1287+
efree(rres);
1288+
RETURN_FALSE;
1289+
}
12791290

12801291
array_init(return_value);
12811292

ext/sqlite/tests/sqlite_018.phpt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
--TEST--
2+
sqlite: crash on bad queries inside sqlite_array_query()
3+
--SKIPIF--
4+
<?php # vim:ft=php
5+
if (!extension_loaded("sqlite")) print "skip"; ?>
6+
--FILE--
7+
<?php
8+
include "blankdb.inc";
9+
10+
sqlite_array_query($db, "SELECT foo FROM foobar");
11+
?>
12+
--EXPECTF--
13+
Warning: sqlite_array_query(): no such table: foobar in %s on line %d

0 commit comments

Comments
 (0)