diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2016-10-17 23:37:00 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2016-10-17 23:38:28 +0200 |
commit | 0b596f81b8f151969898c040db41bbb7c64c275a (patch) | |
tree | ddbeb9c879b48b681b45eb324337598c29b0902d | |
parent | f85cc6aead25f6b44d0843487cf2aeb63c51a8a0 (diff) | |
parent | 86e603a664afdc3a12ead0eaca5d37fa8a379381 (diff) | |
download | php-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-- | NEWS | 3 | ||||
-rw-r--r-- | ext/sqlite3/sqlite3.c | 11 | ||||
-rw-r--r-- | ext/sqlite3/tests/bug63921-32bit.phpt | 2 | ||||
-rw-r--r-- | ext/sqlite3/tests/bug63921-64bit.phpt | 2 | ||||
-rw-r--r-- | ext/sqlite3/tests/bug73333.phpt | 26 |
5 files changed, 40 insertions, 4 deletions
@@ -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===
|