]> granicus.if.org Git - php/commitdiff
port sqlite_array_query() fix from PHP_4_3
authorIlia Alshanetsky <iliaa@php.net>
Mon, 23 Jun 2003 19:37:48 +0000 (19:37 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Mon, 23 Jun 2003 19:37:48 +0000 (19:37 +0000)
ext/sqlite/sqlite.c
ext/sqlite/tests/sqlite_018.phpt [new file with mode: 0755]

index e83ecb43ee2661c1bf1126f6d150bdd8b1c06b05..6d403393aca85a5fc2069768cc6edfeb396c4cee 100644 (file)
@@ -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 (executable)
index 0000000..bc14bb1
--- /dev/null
@@ -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