if (ret != SQLITE_OK) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext);
sqlite_freemem(errtext);
-
- RETURN_FALSE;
+ if (return_value) {
+ RETURN_FALSE;
+ } else {
+ return;
+ }
}
if (!rres) {
/* now the result set is ready for stepping: get first row */
if (php_sqlite_fetch(rres TSRMLS_CC) != SQLITE_OK) {
real_result_dtor(rres TSRMLS_CC);
- RETURN_FALSE;
+ if (return_value) {
+ RETURN_FALSE;
+ } else {
+ return;
+ }
}
rres->curr_row = 0;
rres = (struct php_sqlite_result *)emalloc(sizeof(*rres));
sqlite_query(NULL, db, sql, sql_len, mode, 0, NULL, rres TSRMLS_CC);
+ if (db->last_err_code != SQLITE_OK) {
+ efree(rres);
+ RETURN_FALSE;
+ }
array_init(return_value);
--- /dev/null
+--TEST--
+sqlite: crash on bad queries inside sqlite_array_query()
+--SKIPIF--
+<?php # vim:ft=php
+if (!extension_loaded("sqlite")) print "skip"; ?>
+--FILE--
+<?php
+include "blankdb.inc";
+
+sqlite_array_query($db, "SELECT foo FROM foobar");
+?>
+--EXPECTF--
+Warning: sqlite_array_query(): no such table: foobar in %s on line %d