]> granicus.if.org Git - php/commitdiff
Fix #76665: SQLite3Stmt::bindValue() with SQLITE3_FLOAT doesn't juggle
authorChristoph M. Becker <cmbecker69@gmx.de>
Thu, 26 Jul 2018 11:15:19 +0000 (13:15 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Thu, 26 Jul 2018 11:15:19 +0000 (13:15 +0200)
We need to ensure that a zval IS_DOUBLE before we access it as such.
In this case we apply common type juggling to do so.

NEWS
ext/sqlite3/sqlite3.c
ext/sqlite3/tests/bug76665.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index f3bc056b38b80cbe7222af597e8a46359f2aadf2..87402d9decd19edc786f69eda00b5c6da03a3271 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,10 @@ PHP                                                                        NEWS
 - PDO_Firebird:
   . Fixed bug #76488 (Memory leak when fetching a BLOB field). (Simonov Denis)
 
+- SQLite3:
+  . Fixed #76665 (SQLite3Stmt::bindValue() with SQLITE3_FLOAT doesn't juggle).
+    (cmb)
+
 - Standard:
   . Fixed bug #68553 (array_column: null values in $index_key become incrementing
     keys in result). (Laruence)
index 40406eeafc76aeeb26f6517248e6fd04bb790a98..6894089e412dbcbb3133305092a4f0bc93ebce10 100644 (file)
@@ -1562,7 +1562,7 @@ PHP_METHOD(sqlite3stmt, execute)
                                        break;
 
                                case SQLITE_FLOAT:
-                                       /* convert_to_double(parameter);*/
+                                       convert_to_double(parameter);
                                        sqlite3_bind_double(stmt_obj->stmt, param->param_number, Z_DVAL_P(parameter));
                                        break;
 
diff --git a/ext/sqlite3/tests/bug76665.phpt b/ext/sqlite3/tests/bug76665.phpt
new file mode 100644 (file)
index 0000000..0e1de13
--- /dev/null
@@ -0,0 +1,19 @@
+--TEST--
+Bug #76665 (SQLite3Stmt::bindValue() with SQLITE3_FLOAT doesn't juggle)
+--SKIPIF--
+<?php
+if (!extension_loaded('sqlite3')) die('skip sqlite3 extension not available');
+?>
+--FILE--
+<?php
+$db = new SQLite3(':memory:');
+$db->exec("CREATE TABLE foo (bar REAL)");
+$stmt = $db->prepare("INSERT INTO foo VALUES (:bar)");
+$stmt->bindValue(':bar', 17, SQLITE3_FLOAT);
+$stmt->execute();
+var_dump($db->querySingle("SELECT bar FROM foo LIMIT 1"));
+?>
+===DONE===
+--EXPECT--
+float(17)
+===DONE===