From 0c53b5310a74394e962d25fa4303ccd802237807 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Thu, 28 Apr 2016 14:17:48 +0100 Subject: [PATCH] Protect against node types with reserved names such as toString Fixes #880 --- red/runtime/nodes/flows/util.js | 2 +- red/runtime/nodes/registry/registry.js | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/red/runtime/nodes/flows/util.js b/red/runtime/nodes/flows/util.js index 9017aaa02..ee031b379 100644 --- a/red/runtime/nodes/flows/util.js +++ b/red/runtime/nodes/flows/util.js @@ -105,7 +105,7 @@ module.exports = { config.forEach(function(n) { if (n.type !== 'subflow' && n.type !== 'tab') { for (var prop in n) { - if (n.hasOwnProperty(prop) && prop !== 'id' && prop !== 'wires' && prop !== '_users' && flow.configs[n[prop]]) { + if (n.hasOwnProperty(prop) && prop !== 'id' && prop !== 'wires' && prop !== 'type' && prop !== '_users' && flow.configs[n[prop]]) { // This property references a global config node flow.configs[n[prop]]._users.push(n.id) } diff --git a/red/runtime/nodes/registry/registry.js b/red/runtime/nodes/registry/registry.js index dfb657479..dd4f094c4 100644 --- a/red/runtime/nodes/registry/registry.js +++ b/red/runtime/nodes/registry/registry.js @@ -223,7 +223,7 @@ function removeModule(module) { function getNodeInfo(typeOrId) { var id = typeOrId; - if (nodeTypeToId[typeOrId]) { + if (nodeTypeToId.hasOwnProperty(typeOrId)) { id = nodeTypeToId[typeOrId]; } /* istanbul ignore else */ @@ -248,7 +248,7 @@ function getFullNodeInfo(typeOrId) { // Used by index.enableNodeSet so that .file can be retrieved to pass // to loader.loadNodeSet var id = typeOrId; - if (nodeTypeToId[typeOrId]) { + if (nodeTypeToId.hasOwnProperty(typeOrId)) { id = nodeTypeToId[typeOrId]; } /* istanbul ignore else */ @@ -348,7 +348,7 @@ function inheritNode(constructor) { } function registerNodeConstructor(nodeSet,type,constructor) { - if (nodeConstructors[type]) { + if (nodeConstructors.hasOwnProperty(type)) { throw new Error(type+" already registered"); } //TODO: Ensure type is known - but doing so will break some tests @@ -440,7 +440,11 @@ function clear() { } function getTypeId(type) { - return nodeTypeToId[type]; + if (nodeTypeToId.hasOwnProperty(type)) { + return nodeTypeToId[type]; + } else { + return null; + } } function enableNodeSet(typeOrId) { @@ -449,7 +453,7 @@ function enableNodeSet(typeOrId) { } var id = typeOrId; - if (nodeTypeToId[typeOrId]) { + if (nodeTypeToId.hasOwnProperty(typeOrId)) { id = nodeTypeToId[typeOrId]; } var config; @@ -471,7 +475,7 @@ function disableNodeSet(typeOrId) { throw new Error("Settings unavailable"); } var id = typeOrId; - if (nodeTypeToId[typeOrId]) { + if (nodeTypeToId.hasOwnProperty(typeOrId)) { id = nodeTypeToId[typeOrId]; } var config;