Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit af66641

Browse files
bug #30329 [Form] IntegerType: reject submitted non-integer numbers (xabbuh)
This PR was merged into the 3.4 branch. Discussion ---------- [Form] IntegerType: reject submitted non-integer numbers | Q | A | ------------- | --- | Branch? | 3.4 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #10240 | License | MIT | Doc PR | Commits ------- 6a43e74 IntegerType: reject submitted non-integer numbers
2 parents 1aac865 + 6a43e74 commit af66641

File tree

3 files changed

+40
-10
lines changed

3 files changed

+40
-10
lines changed

src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace Symfony\Component\Form\Extension\Core\DataTransformer;
1313

14+
use Symfony\Component\Form\Exception\TransformationFailedException;
15+
1416
/**
1517
* Transforms between an integer and a localized number with grouping
1618
* (each thousand) and comma separators.
@@ -40,6 +42,12 @@ public function __construct($scale = 0, $grouping = false, $roundingMode = self:
4042
*/
4143
public function reverseTransform($value)
4244
{
45+
$decimalSeparator = $this->getNumberFormatter()->getSymbol(\NumberFormatter::DECIMAL_SEPARATOR_SYMBOL);
46+
47+
if (\is_string($value) && false !== strpos($value, $decimalSeparator)) {
48+
throw new TransformationFailedException(sprintf('The value "%s" is not a valid integer.', $value));
49+
}
50+
4351
$result = parent::reverseTransform($value);
4452

4553
return null !== $result ? (int) $result : null;

src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformerTest.php

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,7 @@ public function testReverseTransform()
9595
$transformer = new IntegerToLocalizedStringTransformer();
9696

9797
$this->assertEquals(1, $transformer->reverseTransform('1'));
98-
$this->assertEquals(1, $transformer->reverseTransform('1,5'));
99-
$this->assertEquals(1234, $transformer->reverseTransform('1234,5'));
100-
$this->assertEquals(12345, $transformer->reverseTransform('12345,912'));
98+
$this->assertEquals(12345, $transformer->reverseTransform('12345'));
10199
}
102100

103101
public function testReverseTransformEmpty()
@@ -116,10 +114,10 @@ public function testReverseTransformWithGrouping()
116114

117115
$transformer = new IntegerToLocalizedStringTransformer(null, true);
118116

119-
$this->assertEquals(1234, $transformer->reverseTransform('1.234,5'));
120-
$this->assertEquals(12345, $transformer->reverseTransform('12.345,912'));
121-
$this->assertEquals(1234, $transformer->reverseTransform('1234,5'));
122-
$this->assertEquals(12345, $transformer->reverseTransform('12345,912'));
117+
$this->assertEquals(1234, $transformer->reverseTransform('1.234'));
118+
$this->assertEquals(12345, $transformer->reverseTransform('12.345'));
119+
$this->assertEquals(1234, $transformer->reverseTransform('1234'));
120+
$this->assertEquals(12345, $transformer->reverseTransform('12345'));
123121
}
124122

125123
public function reverseTransformWithRoundingProvider()
@@ -203,6 +201,29 @@ public function testReverseTransformExpectsValidNumber()
203201
$transformer->reverseTransform('foo');
204202
}
205203

204+
/**
205+
* @dataProvider floatNumberProvider
206+
* @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
207+
*/
208+
public function testReverseTransformExpectsInteger($number, $locale)
209+
{
210+
IntlTestHelper::requireFullIntl($this, false);
211+
212+
\Locale::setDefault($locale);
213+
214+
$transformer = new IntegerToLocalizedStringTransformer();
215+
216+
$transformer->reverseTransform($number);
217+
}
218+
219+
public function floatNumberProvider()
220+
{
221+
return [
222+
['12345.912', 'en'],
223+
['1.234,5', 'de_DE'],
224+
];
225+
}
226+
206227
/**
207228
* @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
208229
*/

src/Symfony/Component/Form/Tests/Extension/Core/Type/IntegerTypeTest.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,15 @@ protected function setUp()
2424
parent::setUp();
2525
}
2626

27-
public function testSubmitCastsToInteger()
27+
public function testSubmitRejectsFloats()
2828
{
2929
$form = $this->factory->create(static::TESTED_TYPE);
3030

3131
$form->submit('1.678');
3232

33-
$this->assertSame(1, $form->getData());
34-
$this->assertSame('1', $form->getViewData());
33+
$this->assertTrue($form->isSubmitted());
34+
$this->assertFalse($form->isValid());
35+
$this->assertFalse($form->isSynchronized());
3536
}
3637

3738
public function testSubmitNull($expected = null, $norm = null, $view = null)

0 commit comments

Comments
 (0)