1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00

Protect against node types with reserved names such as toString

Fixes #880
This commit is contained in:
Nick O'Leary 2016-04-28 14:17:48 +01:00
parent 45ff86eae5
commit 0c53b5310a
2 changed files with 11 additions and 7 deletions

View File

@ -105,7 +105,7 @@ module.exports = {
config.forEach(function(n) { config.forEach(function(n) {
if (n.type !== 'subflow' && n.type !== 'tab') { if (n.type !== 'subflow' && n.type !== 'tab') {
for (var prop in n) { 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 // This property references a global config node
flow.configs[n[prop]]._users.push(n.id) flow.configs[n[prop]]._users.push(n.id)
} }

View File

@ -223,7 +223,7 @@ function removeModule(module) {
function getNodeInfo(typeOrId) { function getNodeInfo(typeOrId) {
var id = typeOrId; var id = typeOrId;
if (nodeTypeToId[typeOrId]) { if (nodeTypeToId.hasOwnProperty(typeOrId)) {
id = nodeTypeToId[typeOrId]; id = nodeTypeToId[typeOrId];
} }
/* istanbul ignore else */ /* istanbul ignore else */
@ -248,7 +248,7 @@ function getFullNodeInfo(typeOrId) {
// Used by index.enableNodeSet so that .file can be retrieved to pass // Used by index.enableNodeSet so that .file can be retrieved to pass
// to loader.loadNodeSet // to loader.loadNodeSet
var id = typeOrId; var id = typeOrId;
if (nodeTypeToId[typeOrId]) { if (nodeTypeToId.hasOwnProperty(typeOrId)) {
id = nodeTypeToId[typeOrId]; id = nodeTypeToId[typeOrId];
} }
/* istanbul ignore else */ /* istanbul ignore else */
@ -348,7 +348,7 @@ function inheritNode(constructor) {
} }
function registerNodeConstructor(nodeSet,type,constructor) { function registerNodeConstructor(nodeSet,type,constructor) {
if (nodeConstructors[type]) { if (nodeConstructors.hasOwnProperty(type)) {
throw new Error(type+" already registered"); throw new Error(type+" already registered");
} }
//TODO: Ensure type is known - but doing so will break some tests //TODO: Ensure type is known - but doing so will break some tests
@ -440,7 +440,11 @@ function clear() {
} }
function getTypeId(type) { function getTypeId(type) {
return nodeTypeToId[type]; if (nodeTypeToId.hasOwnProperty(type)) {
return nodeTypeToId[type];
} else {
return null;
}
} }
function enableNodeSet(typeOrId) { function enableNodeSet(typeOrId) {
@ -449,7 +453,7 @@ function enableNodeSet(typeOrId) {
} }
var id = typeOrId; var id = typeOrId;
if (nodeTypeToId[typeOrId]) { if (nodeTypeToId.hasOwnProperty(typeOrId)) {
id = nodeTypeToId[typeOrId]; id = nodeTypeToId[typeOrId];
} }
var config; var config;
@ -471,7 +475,7 @@ function disableNodeSet(typeOrId) {
throw new Error("Settings unavailable"); throw new Error("Settings unavailable");
} }
var id = typeOrId; var id = typeOrId;
if (nodeTypeToId[typeOrId]) { if (nodeTypeToId.hasOwnProperty(typeOrId)) {
id = nodeTypeToId[typeOrId]; id = nodeTypeToId[typeOrId];
} }
var config; var config;