diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2003-06-23 19:37:48 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2003-06-23 19:37:48 +0000 |
commit | 28347d74bb8d05d18c4d7de7e716475cbcc62b4e (patch) | |
tree | f1cb62eaee4dcafe049242caeee588a6cc755e49 | |
parent | 0f971485ac5c1929558a4b10ddd5fe6909abc780 (diff) | |
download | php-git-28347d74bb8d05d18c4d7de7e716475cbcc62b4e.tar.gz |
port sqlite_array_query() fix from PHP_4_3
-rw-r--r-- | ext/sqlite/sqlite.c | 17 | ||||
-rwxr-xr-x | ext/sqlite/tests/sqlite_018.phpt | 13 |
2 files changed, 27 insertions, 3 deletions
diff --git a/ext/sqlite/sqlite.c b/ext/sqlite/sqlite.c index e83ecb43ee..6d403393ac 100644 --- a/ext/sqlite/sqlite.c +++ b/ext/sqlite/sqlite.c @@ -1305,8 +1305,11 @@ void sqlite_query(zval *object, struct php_sqlite_db *db, char *sql, long sql_le 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) { @@ -1320,7 +1323,11 @@ void sqlite_query(zval *object, struct php_sqlite_db *db, char *sql, long sql_le /* 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; @@ -1664,6 +1671,10 @@ PHP_FUNCTION(sqlite_array_query) 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); diff --git a/ext/sqlite/tests/sqlite_018.phpt b/ext/sqlite/tests/sqlite_018.phpt new file mode 100755 index 0000000000..bc14bb1c8d --- /dev/null +++ b/ext/sqlite/tests/sqlite_018.phpt @@ -0,0 +1,13 @@ +--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 |