From 6b6073f68585415c050c8b6bf0b17efa10cd6cb7 Mon Sep 17 00:00:00 2001 From: Catalin Dan Date: Wed, 9 Mar 2016 16:43:58 +0200 Subject: [PATCH 1/2] [Form] Fix INT64 cast to float in IntegerType. --- .../DataTransformer/NumberToLocalizedStringTransformer.php | 6 +++++- .../NumberToLocalizedStringTransformerTest.php | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php index 7cc3d5c805369..acb75f2ca1ff3 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php @@ -122,7 +122,11 @@ public function reverseTransform($value) $value = str_replace(',', $decSep, $value); } - $result = $formatter->parse($value, \NumberFormatter::TYPE_DOUBLE, $position); + if (!strstr($value, $decSep) && PHP_INT_SIZE === 8) { + $result = $formatter->parse($value, \NumberFormatter::TYPE_INT64, $position); + } else { + $result = $formatter->parse($value, \NumberFormatter::TYPE_DOUBLE, $position); + } if (intl_is_failure($formatter->getErrorCode())) { throw new TransformationFailedException($formatter->getErrorMessage()); diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php index e829871ec3a96..ef9c9738cbe12 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php @@ -433,4 +433,11 @@ public function testReverseTransformDisallowsTrailingExtraCharactersMultibyte() $transformer->reverseTransform("12\xc2\xa0345,678foo"); } + + public function testReverseTransformBigint() + { + $transformer = new NumberToLocalizedStringTransformer(null, true); + + $this->assertEquals(401657096594165125, (int) $transformer->reverseTransform((string) 401657096594165125)); + } } From 03c008cdbfa7c978fe76fc04b3077f1315b378d4 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 15 Mar 2016 16:33:36 +0100 Subject: [PATCH 2/2] [Form] Fix NumberToLocalizedStringTransformer::reverseTransform with big integers --- .../NumberToLocalizedStringTransformer.php | 10 +++++++--- .../NumberToLocalizedStringTransformerTest.php | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php index acb75f2ca1ff3..a18eb957b5ee8 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php @@ -122,12 +122,16 @@ public function reverseTransform($value) $value = str_replace(',', $decSep, $value); } - if (!strstr($value, $decSep) && PHP_INT_SIZE === 8) { - $result = $formatter->parse($value, \NumberFormatter::TYPE_INT64, $position); + if (false !== strpos($value, $decSep)) { + $type = \NumberFormatter::TYPE_DOUBLE; } else { - $result = $formatter->parse($value, \NumberFormatter::TYPE_DOUBLE, $position); + $type = PHP_INT_SIZE === 8 + ? \NumberFormatter::TYPE_INT64 + : \NumberFormatter::TYPE_INT32; } + $result = $formatter->parse($value, $type, $position); + if (intl_is_failure($formatter->getErrorCode())) { throw new TransformationFailedException($formatter->getErrorMessage()); } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php index ef9c9738cbe12..87cdf964c81ef 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php @@ -438,6 +438,6 @@ public function testReverseTransformBigint() { $transformer = new NumberToLocalizedStringTransformer(null, true); - $this->assertEquals(401657096594165125, (int) $transformer->reverseTransform((string) 401657096594165125)); + $this->assertEquals(PHP_INT_MAX - 1, (int) $transformer->reverseTransform((string) (PHP_INT_MAX - 1))); } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy