Merge branch 'PHP-5.4'

* PHP-5.4:
  Bug#59597 NumberFormatter::parse() with TYPE_INT64 results in a 32 bit integer
This commit is contained in:
Stanislav Malyshev 2012-04-19 11:37:55 -07:00
commit 71884b7024
3 changed files with 44 additions and 3 deletions

View File

@ -83,11 +83,10 @@ PHP_FUNCTION( numfmt_parse )
break;
case FORMAT_TYPE_INT64:
val64 = unum_parseInt64(FORMATTER_OBJECT(nfo), sstr, sstr_len, position_p, &INTL_DATA_ERROR_CODE(nfo));
if(val64 > LONG_MAX || val64 < -LONG_MAX) {
if(val64 > LONG_MAX || val64 < LONG_MIN) {
RETVAL_DOUBLE(val64);
} else {
val32 = (int32_t)val64;
RETVAL_LONG(val32);
RETVAL_LONG((long)val64);
}
break;
case FORMAT_TYPE_DOUBLE:

View File

@ -0,0 +1,21 @@
--TEST--
Bug#59597 NumberFormatter::parse() with TYPE_INT64 results in a 32 bit integer
--SKIPIF--
<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
<?php echo PHP_INT_SIZE == 8 ? "skip 32-bit only" : "OK"; ?>
--FILE--
<?php
$formatter = new \NumberFormatter('en', \NumberFormatter::DECIMAL);
$value = $formatter->parse('2147483647', \NumberFormatter::TYPE_INT32);
var_dump($value);
$formatter = new \NumberFormatter('en', \NumberFormatter::DECIMAL);
$value = $formatter->parse('2147483650', \NumberFormatter::TYPE_INT64);
var_dump($value);
?>
--EXPECT--
int(2147483647)
float(2147483650)

View File

@ -0,0 +1,21 @@
--TEST--
Bug#59597 NumberFormatter::parse() with TYPE_INT64 results in a 32 bit integer
--SKIPIF--
<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
<?php echo PHP_INT_SIZE != 8 ? "skip 64-bit only" : "OK"; ?>
--FILE--
<?php
$formatter = new \NumberFormatter('en', \NumberFormatter::DECIMAL);
$value = $formatter->parse('2147483647', \NumberFormatter::TYPE_INT32);
var_dump($value);
$formatter = new \NumberFormatter('en', \NumberFormatter::DECIMAL);
$value = $formatter->parse('2147483650', \NumberFormatter::TYPE_INT64);
var_dump($value);
?>
--EXPECTREGEX--
int(2147483647)
int(2147483650)