From 11b04af14ce64f9b40c8cbf121ee1ac71c069ac2 Mon Sep 17 00:00:00 2001 From: WedgeSama Date: Thu, 17 Oct 2013 09:16:34 +0200 Subject: [PATCH 1/4] Fix DateType for 32bits computers. Fix an issue due to 32bits machines, date can be only between 1902-2037. Simply not add date if false. Issues: #5227 #5554 --- src/Symfony/Component/Form/Extension/Core/Type/DateType.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php index 2ac2f0436ed27..607930dfe428b 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php @@ -300,7 +300,9 @@ private function listYears(array $years) $result = array(); foreach ($years as $year) { - $result[$year] = gmmktime(0, 0, 0, 6, 15, $year); + if(($y = gmmktime(0, 0, 0, 6, 15, $year)) !== false) { + $result[$year] = $y; + } } return $result; From 1616f515d520bba682b24a76bf1add37999d7809 Mon Sep 17 00:00:00 2001 From: WedgeSama Date: Thu, 17 Oct 2013 11:01:14 +0200 Subject: [PATCH 2/4] Fix DateType for 32bits computers, cs Tobion --- src/Symfony/Component/Form/Extension/Core/Type/DateType.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php index 607930dfe428b..f97cdcc3bb947 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php @@ -300,7 +300,7 @@ private function listYears(array $years) $result = array(); foreach ($years as $year) { - if(($y = gmmktime(0, 0, 0, 6, 15, $year)) !== false) { + if(false !== $y = gmmktime(0, 0, 0, 6, 15, $year)) { $result[$year] = $y; } } From e24c970313255dd223af83fea9f09c45e61a806d Mon Sep 17 00:00:00 2001 From: WedgeSama Date: Thu, 14 Nov 2013 15:19:52 +0100 Subject: [PATCH 3/4] Add a test case to DateTypeTest Test case to check years on 32bits machine. --- .../Form/Extension/Core/Type/DateType.php | 2 +- .../Extension/Core/Type/DateTypeTest.php | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php index f97cdcc3bb947..3e3f5b185a465 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php @@ -300,7 +300,7 @@ private function listYears(array $years) $result = array(); foreach ($years as $year) { - if(false !== $y = gmmktime(0, 0, 0, 6, 15, $year)) { + if (false !== $y = gmmktime(0, 0, 0, 6, 15, $year)) { $result[$year] = $y; } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php index 7c71b1a033a6f..3fe7b8b5bf35f 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php @@ -774,4 +774,25 @@ public function testDayErrorsBubbleUp($widget) $this->assertSame(array(), $form['day']->getErrors()); $this->assertSame(array($error), $form->getErrors()); } + + public function testYearsFor32BitsMachines() + { + if (4 !== PHP_INT_SIZE) { + $testCase->markTestSkipped( + 'PHP must be compiled in 32 bit mode to run this test'); + } + + $form = $this->factory->create('date', null, array( + 'years' => range(1900, 2040), + )); + + $view = $form->createView(); + + $listChoices = array(); + foreach(range(1902, 2037) as $y) { + $listChoices[] = new ChoiceView($y, $y, $y); + } + + $this->assertEquals($listChoices, $view['year']->vars['choices']); + } } From 5925e037200208d600bf814205d1444e85a9905b Mon Sep 17 00:00:00 2001 From: WedgeSama Date: Thu, 14 Nov 2013 16:27:13 +0100 Subject: [PATCH 4/4] Fix test case --- .../Component/Form/Tests/Extension/Core/Type/DateTypeTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php index 3fe7b8b5bf35f..8674216fa2f4c 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php @@ -778,7 +778,7 @@ public function testDayErrorsBubbleUp($widget) public function testYearsFor32BitsMachines() { if (4 !== PHP_INT_SIZE) { - $testCase->markTestSkipped( + $this->markTestSkipped( 'PHP must be compiled in 32 bit mode to run this test'); }