mediawiki.inspect: Guard against Object.prototype keys as module names
authorFomafix <fomafix@googlemail.com>
Fri, 12 Dec 2014 13:10:09 +0000 (13:10 +0000)
committer[[mw:User:Fomafix]] <gerritpatchuploader@gmail.com>
Fri, 12 Dec 2014 13:10:09 +0000 (13:10 +0000)
This avoids conflicts where we confuse an Object method for a
registered module.

Change-Id: Ic32b0706e7dc7755ae096e1be2d5d941347d6123

resources/src/mediawiki/mediawiki.inspect.js

index 8e9fc89..4f02e06 100644 (file)
@@ -7,6 +7,9 @@
 /*jshint devel:true */
 ( function ( mw, $ ) {
 
+       var inspect,
+               hasOwn = Object.prototype.hasOwnProperty;
+
        function sortByProperty( array, prop, descending ) {
                var order = descending ? -1 : 1;
                return array.sort( function ( a, b ) {
@@ -25,7 +28,7 @@
         * @class mw.inspect
         * @singleton
         */
-       var inspect = {
+       inspect = {
 
                /**
                 * Return a map of all dependency relationships between loaded modules.
                        $.each( modules, function ( moduleIndex, moduleName ) {
                                var dependencies = mw.loader.moduleRegistry[moduleName].dependencies || [];
 
-                               graph[moduleName] = graph[moduleName] || { requiredBy: [] };
+                               if ( !hasOwn.call( graph, moduleName ) ) {
+                                       graph[moduleName] = { requiredBy: [] };
+                               }
                                graph[moduleName].requires = dependencies;
 
                                $.each( dependencies, function ( depIndex, depName ) {
-                                       graph[depName] = graph[depName] || { requiredBy: [] };
+                                       if ( !hasOwn.call( graph, depName ) ) {
+                                               graph[depName] = { requiredBy: [] };
+                                       }
                                        graph[depName].requiredBy.push( moduleName );
                                } );
                        } );