registration: Avoid double slashes in localBasePath
authorTimo Tijhof <krinklemail@gmail.com>
Tue, 16 Feb 2016 20:39:34 +0000 (20:39 +0000)
committerKunal Mehta <legoktm@member.fsf.org>
Thu, 18 Feb 2016 18:25:02 +0000 (10:25 -0800)
Noticed it in APC usage for ResourceLoader that various keys from
FileContentsHasher contain double slashes. All from extensions that
use the `"localBasePath": ""` trick in extension.json (e.g. Citoid).

Change-Id: I5bac1e2e05e063aa7ff251ce7ffaa965a3451db9

includes/registration/ExtensionProcessor.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php

index 2318c87..fe9304f 100644 (file)
@@ -253,14 +253,24 @@ class ExtensionProcessor implements Processor {
                        ? $info['ResourceFileModulePaths']
                        : false;
                if ( isset( $defaultPaths['localBasePath'] ) ) {
-                       $defaultPaths['localBasePath'] = "$dir/{$defaultPaths['localBasePath']}";
+                       if ( $defaultPaths['localBasePath'] === '' ) {
+                               // Avoid double slashes (e.g. /extensions/Example//path)
+                               $defaultPaths['localBasePath'] = $dir;
+                       } else {
+                               $defaultPaths['localBasePath'] = "$dir/{$defaultPaths['localBasePath']}";
+                       }
                }
 
                foreach ( [ 'ResourceModules', 'ResourceModuleSkinStyles' ] as $setting ) {
                        if ( isset( $info[$setting] ) ) {
                                foreach ( $info[$setting] as $name => $data ) {
                                        if ( isset( $data['localBasePath'] ) ) {
-                                               $data['localBasePath'] = "$dir/{$data['localBasePath']}";
+                                               if ( $data['localBasePath'] === '' ) {
+                                                       // Avoid double slashes (e.g. /extensions/Example//path)
+                                                       $data['localBasePath'] = $dir;
+                                               } else {
+                                                       $data['localBasePath'] = "$dir/{$data['localBasePath']}";
+                                               }
                                        }
                                        if ( $defaultPaths ) {
                                                $data += $defaultPaths;
index 7f84e33..35aca48 100644 (file)
@@ -218,7 +218,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
        }
 
        public static function provideExtractResourceLoaderModules() {
-               $dir = __DIR__ . '/FooBar/';
+               $dir = __DIR__ . '/FooBar';
                return [
                        // Generic module with localBasePath/remoteExtPath specified
                        [
@@ -285,7 +285,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                                                ],
                                                'test.bar' => [
                                                        'styles' => 'bar.js',
-                                                       'localBasePath' => $dir . 'subdir',
+                                                       'localBasePath' => "$dir/subdir",
                                                        'remoteExtPath' => 'FooBar/subdir',
                                                ],
                                                'test.class' => [