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:
--- /dev/null
+--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)