mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
commit
f234104379
4 changed files with 94 additions and 8 deletions
4
NEWS
4
NEWS
|
@ -17,6 +17,10 @@ PHP NEWS
|
|||
. Fixed LibreSSL undefined reference when OPENSSL_NO_ENGINE not set.
|
||||
(David Carlier).
|
||||
|
||||
- PDO_Firebird:
|
||||
. Fix GH-13119 (Changed to convert float and double values into strings using
|
||||
`H` format). (SakiTakamachi)
|
||||
|
||||
- Phar:
|
||||
. Fixed bug #71465 (PHAR doesn't know about litespeed). (nielsdos)
|
||||
|
||||
|
|
|
@ -51,6 +51,11 @@ static zend_always_inline double get_double_from_sqldata(const ISC_SCHAR *sqldat
|
|||
READ_AND_RETURN_USING_MEMCPY(double, sqldata);
|
||||
}
|
||||
|
||||
static zend_always_inline float get_float_from_sqldata(const ISC_SCHAR *sqldata)
|
||||
{
|
||||
READ_AND_RETURN_USING_MEMCPY(float, sqldata);
|
||||
}
|
||||
|
||||
static zend_always_inline ISC_TIMESTAMP get_isc_timestamp_from_sqldata(const ISC_SCHAR *sqldata)
|
||||
{
|
||||
READ_AND_RETURN_USING_MEMCPY(ISC_TIMESTAMP, sqldata);
|
||||
|
@ -459,11 +464,11 @@ static int firebird_stmt_get_col(
|
|||
break;
|
||||
case SQL_FLOAT:
|
||||
/* TODO: Why is this not returned as the native type? */
|
||||
ZVAL_STR(result, zend_strpprintf(0, "%F", *(float*)var->sqldata));
|
||||
ZVAL_STR(result, zend_strpprintf_unchecked(0, "%.8H", get_float_from_sqldata(var->sqldata)));
|
||||
break;
|
||||
case SQL_DOUBLE:
|
||||
/* TODO: Why is this not returned as the native type? */
|
||||
ZVAL_STR(result, zend_strpprintf(0, "%F", get_double_from_sqldata(var->sqldata)));
|
||||
ZVAL_STR(result, zend_strpprintf_unchecked(0, "%.16H", get_double_from_sqldata(var->sqldata)));
|
||||
break;
|
||||
#ifdef SQL_BOOLEAN
|
||||
case SQL_BOOLEAN:
|
||||
|
|
|
@ -79,8 +79,8 @@ Array
|
|||
|
||||
Array
|
||||
(
|
||||
[DBL] => 1.000000
|
||||
[0] => 1.000000
|
||||
[DBL] => 1
|
||||
[0] => 1
|
||||
)
|
||||
|
||||
Array
|
||||
|
@ -103,10 +103,10 @@ Array
|
|||
[1] => ABC
|
||||
[NUM] => 12.340
|
||||
[2] => 12.340
|
||||
[DBL] => 1.000000
|
||||
[3] => 1.000000
|
||||
[FLT] => 2.000000
|
||||
[4] => 2.000000
|
||||
[DBL] => 1
|
||||
[3] => 1
|
||||
[FLT] => 2
|
||||
[4] => 2
|
||||
[TS] => 2023-03-24 17:39:00
|
||||
[5] => 2023-03-24 17:39:00
|
||||
[MYDATE] => 2023-03-24
|
||||
|
|
77
ext/pdo_firebird/tests/gh13119.phpt
Normal file
77
ext/pdo_firebird/tests/gh13119.phpt
Normal file
|
@ -0,0 +1,77 @@
|
|||
--TEST--
|
||||
GH-13119 (float, double value is incorrect)
|
||||
--EXTENSIONS--
|
||||
pdo_firebird
|
||||
--SKIPIF--
|
||||
<?php require('skipif.inc'); ?>
|
||||
--XLEAK--
|
||||
A bug in firebird causes a memory leak when calling `isc_attach_database()`.
|
||||
See https://github.com/FirebirdSQL/firebird/issues/7849
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require("testdb.inc");
|
||||
|
||||
$dbh->exec('CREATE TABLE gh13119 (f_val FLOAT, d_val DOUBLE PRECISION)');
|
||||
|
||||
$dbh->exec('INSERT INTO gh13119 VALUES (0.1, 0.1)');
|
||||
$dbh->exec('INSERT INTO gh13119 VALUES (0.0000000000000001, 0.0000000000000001)');
|
||||
$dbh->exec('INSERT INTO gh13119 VALUES (12.000000, 12.00000000000000)');
|
||||
$dbh->exec('INSERT INTO gh13119 VALUES (12.000001, 12.00000000000001)');
|
||||
$dbh->exec('INSERT INTO gh13119 VALUES (12.345678, 12.34567890123456)');
|
||||
$dbh->exec('INSERT INTO gh13119 VALUES (0.0000000000000000012345678, 0.000000000000000001234567890123456)');
|
||||
|
||||
$stmt = $dbh->query('select * from gh13119');
|
||||
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
require 'testdb.inc';
|
||||
@$dbh->exec('DROP TABLE gh13119');
|
||||
unset($dbh);
|
||||
?>
|
||||
--EXPECT--
|
||||
array(6) {
|
||||
[0]=>
|
||||
array(2) {
|
||||
["F_VAL"]=>
|
||||
string(3) "0.1"
|
||||
["D_VAL"]=>
|
||||
string(3) "0.1"
|
||||
}
|
||||
[1]=>
|
||||
array(2) {
|
||||
["F_VAL"]=>
|
||||
string(7) "1.0E-16"
|
||||
["D_VAL"]=>
|
||||
string(7) "1.0E-16"
|
||||
}
|
||||
[2]=>
|
||||
array(2) {
|
||||
["F_VAL"]=>
|
||||
string(2) "12"
|
||||
["D_VAL"]=>
|
||||
string(2) "12"
|
||||
}
|
||||
[3]=>
|
||||
array(2) {
|
||||
["F_VAL"]=>
|
||||
string(9) "12.000001"
|
||||
["D_VAL"]=>
|
||||
string(17) "12.00000000000001"
|
||||
}
|
||||
[4]=>
|
||||
array(2) {
|
||||
["F_VAL"]=>
|
||||
string(9) "12.345678"
|
||||
["D_VAL"]=>
|
||||
string(17) "12.34567890123456"
|
||||
}
|
||||
[5]=>
|
||||
array(2) {
|
||||
["F_VAL"]=>
|
||||
string(13) "1.2345678E-18"
|
||||
["D_VAL"]=>
|
||||
string(21) "1.234567890123456E-18"
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue