Browse Source

Bug#59597 NumberFormatter::parse() with TYPE_INT64 results in a 32 bit integer

pull/61/head
Sherif Ramadan 14 years ago
parent
commit
2827324c7c
  1. 5
      ext/intl/formatter/formatter_parse.c
  2. 19
      ext/intl/tests/bug59597.phpt

5
ext/intl/formatter/formatter_parse.c

@ -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:

19
ext/intl/tests/bug59597.phpt

@ -0,0 +1,19 @@
--TEST--
Bug#59597 NumberFormatter::parse() with TYPE_INT64 results in a 32 bit integer
--SKIPIF--
<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
--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);
?>
--EXPECTF--
int(2147483647)
int(2147483650)
Loading…
Cancel
Save