From 45d17eb9bb5217719b8d1f71959d74f1a80bdbd9 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Tue, 5 Apr 2016 19:46:09 +0900 Subject: [PATCH] Add unit tests for #429 and improve regexp efficiency --- common/framework/filters/mediafilter.php | 6 +++--- tests/unit/framework/filters/MediaFilterTest.php | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/common/framework/filters/mediafilter.php b/common/framework/filters/mediafilter.php index 49080cdfe..380d085e1 100644 --- a/common/framework/filters/mediafilter.php +++ b/common/framework/filters/mediafilter.php @@ -79,7 +79,7 @@ class MediaFilter */ public static function formatPrefix($prefix) { - $prefix = preg_match('@^(https?:)?//(.*)$@i', $prefix, $matches) ? $matches[2] : $prefix; + $prefix = preg_match('@^(?:https?:)?//(.*)$@i', $prefix, $matches) ? $matches[1] : $prefix; if (strpos($prefix, '/') === false) { $prefix .= '/'; @@ -117,7 +117,7 @@ class MediaFilter { $result[] = str_replace('\*\.', '[a-z0-9-]+\.', preg_quote($domain, '%')); } - return '%^(https?:)?//(' . implode('|', $result) . ')%'; + return '%^(?:https?:)?//(' . implode('|', $result) . ')%'; } /** @@ -150,7 +150,7 @@ class MediaFilter { $result[] = str_replace('\*\.', '[a-z0-9-]+\.', preg_quote($domain, '%')); } - return '%^(https?:)?//(' . implode('|', $result) . ')%'; + return '%^(?:https?:)?//(' . implode('|', $result) . ')%'; } /** diff --git a/tests/unit/framework/filters/MediaFilterTest.php b/tests/unit/framework/filters/MediaFilterTest.php index 1e865a240..3b10ca4e9 100644 --- a/tests/unit/framework/filters/MediaFilterTest.php +++ b/tests/unit/framework/filters/MediaFilterTest.php @@ -16,6 +16,10 @@ class MediaFilterTest extends \Codeception\TestCase\Test $this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchIframeWhitelist('https://www.youtube.com/v')); $this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchIframeWhitelist('http://www-youtube.com/v')); + // Match protocol-relative URLs. + $this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchIframeWhitelist('//www.youtube.com/v')); + $this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchIframeWhitelist('//www-youtube.com/v')); + // object whitelist as array. $this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Filters\MediaFilter::getObjectWhitelist())); $this->assertFalse(in_array('random-website.com/', Rhymix\Framework\Filters\MediaFilter::getObjectWhitelist())); @@ -27,6 +31,10 @@ class MediaFilterTest extends \Codeception\TestCase\Test // Match individual URL against object whitelist. $this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist('https://www.youtube.com/v')); $this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist('http://www-youtube.com/v')); + + // Match protocol-relative URLs. + $this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist('//www.youtube.com/v')); + $this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist('//www-youtube.com/v')); } public function testAddPrefix()