Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit a93df81

Browse filesBrowse files
committed
IntegerType: reject submitted non-integer numbers
1 parent 7b4f4bf commit a93df81
Copy full SHA for a93df81

File tree

3 files changed

+40
-10
lines changed
Filter options

3 files changed

+40
-10
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php
+8Lines 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 float "%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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformerTest.php
+28-7Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/IntegerTypeTest.php
+4-3Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.