From b312a004f3fd14e6e25a64a0d6c8dfacf2dcde99 Mon Sep 17 00:00:00 2001 From: Stepan Anchugov Date: Mon, 18 Aug 2014 22:28:21 +0600 Subject: [PATCH 1/5] [Form] Fix #11694 - Enforce RepeatedType options value type check --- .../Form/Extension/Core/Type/RepeatedType.php | 6 ++++ .../Extension/Core/Type/RepeatedTypeTest.php | 33 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/RepeatedType.php b/src/Symfony/Component/Form/Extension/Core/Type/RepeatedType.php index 9a3cd14615c10..67422e38f4779 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/RepeatedType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/RepeatedType.php @@ -55,6 +55,12 @@ public function setDefaultOptions(OptionsResolverInterface $resolver) 'second_name' => 'second', 'error_bubbling' => false, )); + + $resolver->setAllowedTypes(array( + 'options' => 'array', + 'first_options' => 'array', + 'second_options' => 'array', + )); } /** diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/RepeatedTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/RepeatedTypeTest.php index 9e125d781b7fa..dd1b6894d50dc 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/RepeatedTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/RepeatedTypeTest.php @@ -72,6 +72,39 @@ public function testSetRequired() $this->assertFalse($form['second']->isRequired()); } + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testSetInvalidOptions() + { + $this->factory->create('repeated', null, array( + 'type' => 'text', + 'options' => 'bad value', + )); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testSetInvalidFirstOptions() + { + $this->factory->create('repeated', null, array( + 'type' => 'text', + 'first_options' => 'bad value', + )); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testSetInvalidSecondOptions() + { + $this->factory->create('repeated', null, array( + 'type' => 'text', + 'second_options' => 'bad value', + )); + } + public function testSetErrorBubblingToTrue() { $form = $this->factory->create('repeated', null, array( From 66ab67ceda25cf56a69641994a523b191375a522 Mon Sep 17 00:00:00 2001 From: Stepan Anchugov Date: Tue, 19 Aug 2014 15:36:55 +0600 Subject: [PATCH 2/5] [Form] Fix BirthdayType 'years' option to disallow non-array values --- .../Form/Extension/Core/Type/BirthdayType.php | 4 +++ .../Extension/Core/Type/BirthdayTypeTest.php | 33 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/Symfony/Component/Form/Tests/Extension/Core/Type/BirthdayTypeTest.php diff --git a/src/Symfony/Component/Form/Extension/Core/Type/BirthdayType.php b/src/Symfony/Component/Form/Extension/Core/Type/BirthdayType.php index 5314c140a19b9..f90f57d4b6d71 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/BirthdayType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/BirthdayType.php @@ -24,6 +24,10 @@ public function setDefaultOptions(OptionsResolverInterface $resolver) $resolver->setDefaults(array( 'years' => range(date('Y') - 120, date('Y')), )); + + $resolver->setAllowedTypes(array( + 'years' => 'array', + )); } /** diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/BirthdayTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/BirthdayTypeTest.php new file mode 100644 index 0000000000000..755eac9035e07 --- /dev/null +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/BirthdayTypeTest.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Form\Tests\Extension\Core\Type; + +/** + * @author Stepan Anchugov + */ +class BirthdayTypeTest extends BaseTypeTest +{ + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testSetInvalidYearsOption() + { + $this->factory->create('birthday', null, array( + 'years' => 'bad value', + )); + } + + protected function getTestedType() + { + return 'birthday'; + } +} From 2ef8f26fb6f6bfb86f5b628c2f2fe9c23f1a9e0f Mon Sep 17 00:00:00 2001 From: Stepan Anchugov Date: Tue, 19 Aug 2014 15:41:40 +0600 Subject: [PATCH 3/5] [Form] Fix DateType 'years', 'months' and 'days' options to only accept arrays --- .../Form/Extension/Core/Type/DateType.php | 3 ++ .../Extension/Core/Type/DateTypeTest.php | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php index 1748d2e31f6bb..7f85e3c63aba0 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php @@ -237,6 +237,9 @@ public function setDefaultOptions(OptionsResolverInterface $resolver) $resolver->setAllowedTypes(array( 'format' => array('int', 'string'), + 'years' => 'array', + 'months' => 'array', + 'days' => 'array', )); } 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 e38bfe0ebb61c..7a63635157425 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php @@ -340,6 +340,36 @@ public function testThrowExceptionIfFormatIsInvalid() )); } + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testThrowExceptionIfYearsIsInvalid() + { + $this->factory->create('date', null, array( + 'years' => 'bad value', + )); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testThrowExceptionIfMonthsIsInvalid() + { + $this->factory->create('date', null, array( + 'months' => 'bad value', + )); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testThrowExceptionIfDaysIsInvalid() + { + $this->factory->create('date', null, array( + 'days' => 'bad value', + )); + } + public function testSetDataWithDifferentTimezones() { $form = $this->factory->create('date', null, array( From de1786e3b11a650257c99f63f94594ecdb62a7ab Mon Sep 17 00:00:00 2001 From: Stepan Anchugov Date: Tue, 19 Aug 2014 15:49:42 +0600 Subject: [PATCH 4/5] [Form] Fix TimeType 'hours', 'minutes' and 'seconds' options to allow only arrays --- .../Form/Extension/Core/Type/TimeType.php | 6 ++++ .../Extension/Core/Type/TimeTypeTest.php | 30 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php index 6bf41517ac0d7..98bd5c16b79d5 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php @@ -221,6 +221,12 @@ public function setDefaultOptions(OptionsResolverInterface $resolver) 'choice', ), )); + + $resolver->setAllowedTypes(array( + 'hours' => 'array', + 'minutes' => 'array', + 'seconds' => 'array', + )); } /** diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php index bfd1b793473b6..5c2d6d1e63bdc 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php @@ -673,4 +673,34 @@ public function testInitializeWithSecondsAndWithoutMinutes() 'with_seconds' => true, )); } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testThrowExceptionIfHoursIsInvalid() + { + $this->factory->create('time', null, array( + 'hours' => 'bad value', + )); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testThrowExceptionIfMinutesIsInvalid() + { + $this->factory->create('time', null, array( + 'minutes' => 'bad value', + )); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testThrowExceptionIfSecondsIsInvalid() + { + $this->factory->create('time', null, array( + 'seconds' => 'bad value', + )); + } } From d8284a30bccccd23a35ed6e8d1441d432163f3e9 Mon Sep 17 00:00:00 2001 From: Stepan Anchugov Date: Tue, 19 Aug 2014 16:37:22 +0600 Subject: [PATCH 5/5] [Form] Fix UrlType to allow only null/string values --- .../Component/Form/Extension/Core/Type/UrlType.php | 4 ++++ .../Form/Tests/Extension/Core/Type/UrlTypeTest.php | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/UrlType.php b/src/Symfony/Component/Form/Extension/Core/Type/UrlType.php index 27749b1a8c7e9..b79809259f7cb 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/UrlType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/UrlType.php @@ -34,6 +34,10 @@ public function setDefaultOptions(OptionsResolverInterface $resolver) $resolver->setDefaults(array( 'default_protocol' => 'http', )); + + $resolver->setAllowedTypes(array( + 'default_protocol' => array('null', 'string'), + )); } /** diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/UrlTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/UrlTypeTest.php index 718d4cd650b27..fa975ac86c715 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/UrlTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/UrlTypeTest.php @@ -70,4 +70,14 @@ public function testSubmitAddsNoDefaultProtocolIfSetToNull() $this->assertSame('www.domain.com', $form->getData()); $this->assertSame('www.domain.com', $form->getViewData()); } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testThrowExceptionIfDefaultProtocolIsInvalid() + { + $this->factory->create('url', null, array( + 'default_protocol' => array(), + )); + } }