diff --git a/lib/Cake/Routing/Filter/AssetDispatcher.php b/lib/Cake/Routing/Filter/AssetDispatcher.php index d1e8db107b1..0f11d2edf22 100644 --- a/lib/Cake/Routing/Filter/AssetDispatcher.php +++ b/lib/Cake/Routing/Filter/AssetDispatcher.php @@ -124,7 +124,7 @@ protected function _getAssetFile($url) { } $plugin = Inflector::camelize($parts[0]); - if (CakePlugin::loaded($plugin)) { + if ($plugin && CakePlugin::loaded($plugin)) { unset($parts[0]); $fileFragment = urldecode(implode(DS, $parts)); $pluginWebroot = CakePlugin::path($plugin) . 'webroot' . DS; diff --git a/lib/Cake/Test/Case/Routing/Filter/AssetDispatcherTest.php b/lib/Cake/Test/Case/Routing/Filter/AssetDispatcherTest.php index 52be23bc5a1..758798dc6e1 100644 --- a/lib/Cake/Test/Case/Routing/Filter/AssetDispatcherTest.php +++ b/lib/Cake/Test/Case/Routing/Filter/AssetDispatcherTest.php @@ -121,4 +121,21 @@ public function testNotModified() { $this->assertSame($response, $filter->beforeDispatch($event)); $this->assertEquals($time->format('D, j M Y H:i:s') . ' GMT', $response->modified()); } + +/** + * Test that no exceptions are thrown for //index.php type urls. + * + * @return void + */ + public function test404OnDoubleSlash() { + $filter = new AssetDispatcher(); + + $response = $this->getMock('CakeResponse', array('_sendHeader')); + $request = new CakeRequest('//index.php'); + $event = new CakeEvent('Dispatcher.beforeRequest', $this, compact('request', 'response')); + + $this->assertNull($filter->beforeDispatch($event)); + $this->assertFalse($event->isStopped()); + } + }