]> granicus.if.org Git - php/commitdiff
Fixed a crash in SQLite when fetching data using sqlite_fetch_object() in
authorIlia Alshanetsky <iliaa@php.net>
Wed, 10 Dec 2003 01:02:20 +0000 (01:02 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Wed, 10 Dec 2003 01:02:20 +0000 (01:02 +0000)
a loop.

ext/sqlite/sqlite.c
ext/sqlite/tests/sqlite_025.phpt [new file with mode: 0755]

index a6bb92c5f8c0a84795a32e28c28a01e25a00bbf6..535455ccab33ec36b8b73ab74beda5a1b06473b5 100644 (file)
@@ -1845,7 +1845,11 @@ PHP_FUNCTION(sqlite_fetch_object)
                return;
        }
 
-       php_sqlite_fetch_array(res, PHPSQLITE_ASSOC, decode_binary, 1, &dataset TSRMLS_CC);
+       if (res->curr_row < res->nrows) {
+               php_sqlite_fetch_array(res, PHPSQLITE_ASSOC, decode_binary, 1, &dataset TSRMLS_CC);
+       } else {
+               RETURN_FALSE;
+       }
 
        object_and_properties_init(return_value, ce, NULL);
        zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC);
diff --git a/ext/sqlite/tests/sqlite_025.phpt b/ext/sqlite/tests/sqlite_025.phpt
new file mode 100755 (executable)
index 0000000..0a25761
--- /dev/null
@@ -0,0 +1,38 @@
+--TEST--
+sqlite: sqlite_fetch_object in a loop
+--INI--
+sqlite.assoc_case=0
+--SKIPIF--
+<?php # vim:ft=php
+if (!extension_loaded("sqlite")) print "skip"; ?>
+--FILE--
+<?php 
+include "blankdb.inc";
+
+sqlite_query($db, "CREATE TABLE strings(a)");
+
+foreach (array("one", "two", "three") as $str) {
+       sqlite_query($db, "INSERT INTO strings VALUES('$str')");
+}
+
+$res = sqlite_query("SELECT * FROM strings", $db);
+
+while (($obj = sqlite_fetch_object($res))) {
+       var_dump($obj);
+}
+
+sqlite_close($db);
+?>
+--EXPECTF--
+object(stdClass)#1 (1) {
+  ["a"]=>
+  string(3) "one"
+}
+object(stdClass)#2 (1) {
+  ["a"]=>
+  string(3) "two"
+}
+object(stdClass)#1 (1) {
+  ["a"]=>
+  string(5) "three"
+}
\ No newline at end of file