From 46dd3b9acb19c279b56be28fb3062f9a961b51ea Mon Sep 17 00:00:00 2001 From: Maxime STEINHAUSSER Date: Fri, 28 Oct 2016 15:52:16 +0200 Subject: [PATCH] [Form] Fix UrlType transforms valid protocols --- .../EventListener/FixUrlProtocolListener.php | 2 +- .../FixUrlProtocolListenerTest.php | 21 +++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Component/Form/Extension/Core/EventListener/FixUrlProtocolListener.php b/src/Symfony/Component/Form/Extension/Core/EventListener/FixUrlProtocolListener.php index a08337ec51..e9a51cc988 100644 --- a/src/Symfony/Component/Form/Extension/Core/EventListener/FixUrlProtocolListener.php +++ b/src/Symfony/Component/Form/Extension/Core/EventListener/FixUrlProtocolListener.php @@ -38,7 +38,7 @@ class FixUrlProtocolListener implements EventSubscriberInterface { $data = $event->getData(); - if ($this->defaultProtocol && $data && !preg_match('~^\w+://~', $data)) { + if ($this->defaultProtocol && $data && !preg_match('~^[\w+.-]+://~', $data)) { $event->setData($this->defaultProtocol.'://'.$data); } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/EventListener/FixUrlProtocolListenerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/EventListener/FixUrlProtocolListenerTest.php index a971ea215c..c3c9d08463 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/EventListener/FixUrlProtocolListenerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/EventListener/FixUrlProtocolListenerTest.php @@ -40,15 +40,28 @@ class FixUrlProtocolListenerTest extends \PHPUnit_Framework_TestCase $this->assertEquals('http://www.symfony.com', $event->getData()); } - public function testSkipOtherProtocol() + public function provideUrlsWithSupportedProtocols() + { + return array( + array('ftp://www.symfony.com'), + array('chrome-extension://foo'), + array('h323://foo'), + array('iris.beep://foo'), + array('foo+bar://foo'), + ); + } + + /** + * @dataProvider provideUrlsWithSupportedProtocols + */ + public function testSkipOtherProtocol($url) { - $data = 'ftp://www.symfony.com'; $form = $this->getMock('Symfony\Component\Form\Test\FormInterface'); - $event = new FormEvent($form, $data); + $event = new FormEvent($form, $url); $filter = new FixUrlProtocolListener('http'); $filter->onSubmit($event); - $this->assertEquals('ftp://www.symfony.com', $event->getData()); + $this->assertEquals($url, $event->getData()); } }