From d4107778a46180c2d4698c92cfa53fc82e847ee0 Mon Sep 17 00:00:00 2001 From: Fomafix Date: Fri, 12 Dec 2014 13:10:09 +0000 Subject: [PATCH] mediawiki.inspect: Guard against Object.prototype keys as module names This avoids conflicts where we confuse an Object method for a registered module. Change-Id: Ic32b0706e7dc7755ae096e1be2d5d941347d6123 --- resources/src/mediawiki/mediawiki.inspect.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/resources/src/mediawiki/mediawiki.inspect.js b/resources/src/mediawiki/mediawiki.inspect.js index 8e9fc89f4b..4f02e06e1d 100644 --- a/resources/src/mediawiki/mediawiki.inspect.js +++ b/resources/src/mediawiki/mediawiki.inspect.js @@ -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. @@ -39,11 +42,15 @@ $.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 ); } ); } ); -- 2.20.1