From 2827324c7cc4f3a28ad66cd2a3724165abac4941 Mon Sep 17 00:00:00 2001 From: Sherif Ramadan Date: Thu, 19 Apr 2012 04:44:43 -0400 Subject: [PATCH] Bug#59597 NumberFormatter::parse() with TYPE_INT64 results in a 32 bit integer --- ext/intl/formatter/formatter_parse.c | 5 ++--- ext/intl/tests/bug59597.phpt | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 ext/intl/tests/bug59597.phpt diff --git a/ext/intl/formatter/formatter_parse.c b/ext/intl/formatter/formatter_parse.c index cbdde855dec..6f3a3a12b5b 100755 --- a/ext/intl/formatter/formatter_parse.c +++ b/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: diff --git a/ext/intl/tests/bug59597.phpt b/ext/intl/tests/bug59597.phpt new file mode 100644 index 00000000000..54c9b6d3ccd --- /dev/null +++ b/ext/intl/tests/bug59597.phpt @@ -0,0 +1,19 @@ +--TEST-- +Bug#59597 NumberFormatter::parse() with TYPE_INT64 results in a 32 bit integer +--SKIPIF-- + +--FILE-- +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)