summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2016-10-17 23:37:00 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2016-10-17 23:38:28 +0200
commit0b596f81b8f151969898c040db41bbb7c64c275a (patch)
treeddbeb9c879b48b681b45eb324337598c29b0902d
parentf85cc6aead25f6b44d0843487cf2aeb63c51a8a0 (diff)
parent86e603a664afdc3a12ead0eaca5d37fa8a379381 (diff)
downloadphp-git-0b596f81b8f151969898c040db41bbb7c64c275a.tar.gz
Merge branch 'PHP-5.6' into PHP-7.0
We also use ZEND_LONG_(MAX|MIN) now instead of LONG_(MAX|MIN).
-rw-r--r--NEWS3
-rw-r--r--ext/sqlite3/sqlite3.c11
-rw-r--r--ext/sqlite3/tests/bug63921-32bit.phpt2
-rw-r--r--ext/sqlite3/tests/bug63921-64bit.phpt2
-rw-r--r--ext/sqlite3/tests/bug73333.phpt26
5 files changed, 40 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index c9c8543df3..1136fc0370 100644
--- a/NEWS
+++ b/NEWS
@@ -37,6 +37,9 @@ PHP NEWS
. Fixed bug #73237 (Nested object in "any" element overwrites other fields).
(Keith Smiley)
+- SQLite3:
+ . Fixed bug #73333 (2147483647 is fetched as string). (cmb)
+
- Standard:
. Fixed bug #73203 (passing additional_parameters causes mail to fail). (cmb)
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c
index 9c14dabc66..23d0b97b43 100644
--- a/ext/sqlite3/sqlite3.c
+++ b/ext/sqlite3/sqlite3.c
@@ -579,13 +579,20 @@ PHP_METHOD(sqlite3, query)
static void sqlite_value_to_zval(sqlite3_stmt *stmt, int column, zval *data) /* {{{ */
{
+ sqlite3_int64 val;
+
switch (sqlite3_column_type(stmt, column)) {
case SQLITE_INTEGER:
- if ((sqlite3_column_int64(stmt, column)) >= INT_MAX || sqlite3_column_int64(stmt, column) <= INT_MIN) {
+ val = sqlite3_column_int64(stmt, column);
+#if LONG_MAX <= 2147483647
+ if (val > ZEND_LONG_MAX || val < ZEND_LONG_MIN) {
ZVAL_STRINGL(data, (char *)sqlite3_column_text(stmt, column), sqlite3_column_bytes(stmt, column));
} else {
- ZVAL_LONG(data, sqlite3_column_int64(stmt, column));
+#endif
+ ZVAL_LONG(data, val);
+#if LONG_MAX <= 2147483647
}
+#endif
break;
case SQLITE_FLOAT:
diff --git a/ext/sqlite3/tests/bug63921-32bit.phpt b/ext/sqlite3/tests/bug63921-32bit.phpt
index 8c1c6b9414..d2cc7b2002 100644
--- a/ext/sqlite3/tests/bug63921-32bit.phpt
+++ b/ext/sqlite3/tests/bug63921-32bit.phpt
@@ -24,4 +24,4 @@ var_dump($num,$result[0]);
?>
--EXPECT--
int(2147483647)
-string(10) "2147483647"
+int(2147483647)
diff --git a/ext/sqlite3/tests/bug63921-64bit.phpt b/ext/sqlite3/tests/bug63921-64bit.phpt
index 8e821fd2d0..d6c539e185 100644
--- a/ext/sqlite3/tests/bug63921-64bit.phpt
+++ b/ext/sqlite3/tests/bug63921-64bit.phpt
@@ -24,4 +24,4 @@ var_dump($num,$result[0]);
?>
--EXPECT--
int(100004313234244)
-string(15) "100004313234244"
+int(100004313234244)
diff --git a/ext/sqlite3/tests/bug73333.phpt b/ext/sqlite3/tests/bug73333.phpt
new file mode 100644
index 0000000000..7315751810
--- /dev/null
+++ b/ext/sqlite3/tests/bug73333.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Bug #73333 (2147483647 is fetched as string)
+--SKIPIF--
+<?php
+if (!extension_loaded('sqlite3')) die('skip sqlite3 extension not available');
+?>
+--FILE--
+<?php
+if (!defined('PHP_INT_MIN')) define('PHP_INT_MIN', -PHP_INT_MAX-1);
+
+$db = new SQLite3(':memory:');
+$db->exec('CREATE TABLE foo (bar INT)');
+foreach ([PHP_INT_MIN, PHP_INT_MAX] as $value) {
+ $db->exec("INSERT INTO foo VALUES ($value)");
+}
+
+$res = $db->query('SELECT bar FROM foo');
+while (($row = $res->fetchArray(SQLITE3_NUM)) !== false) {
+ echo gettype($row[0]), PHP_EOL;
+}
+?>
+===DONE===
+--EXPECT--
+integer
+integer
+===DONE===