From 2571dd8e8e43fd320672763564b16a5b3ae33966 Mon Sep 17 00:00:00 2001 From: kpdecker Date: Sat, 22 Aug 2015 10:57:24 -0700 Subject: Improve sanity checks in compiler and visitor --- lib/handlebars/compiler/compiler.js | 5 +++++ lib/handlebars/compiler/visitor.js | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/handlebars/compiler/compiler.js b/lib/handlebars/compiler/compiler.js index c8db7c9..ad6b861 100644 --- a/lib/handlebars/compiler/compiler.js +++ b/lib/handlebars/compiler/compiler.js @@ -90,6 +90,11 @@ Compiler.prototype = { }, accept: function(node) { + /* istanbul ignore next: Sanity code */ + if (!this[node.type]) { + throw new Exception('Unknown type: ' + node.type, node); + } + this.sourceNode.unshift(node); let ret = this[node.type](node); this.sourceNode.shift(); diff --git a/lib/handlebars/compiler/visitor.js b/lib/handlebars/compiler/visitor.js index 47f86e0..89dd632 100644 --- a/lib/handlebars/compiler/visitor.js +++ b/lib/handlebars/compiler/visitor.js @@ -12,8 +12,9 @@ Visitor.prototype = { acceptKey: function(node, name) { let value = this.accept(node[name]); if (this.mutating) { - // Hacky sanity check: - if (value && typeof value.type !== 'string') { + // Hacky sanity check: This may have a few false positives for type for the helper + // methods but will generally do the right thing without a lot of overhead. + if (value && !Visitor.prototype[value.type]) { throw new Exception('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type); } node[name] = value; @@ -49,6 +50,11 @@ Visitor.prototype = { return; } + /* istanbul ignore next: Sanity code */ + if (!this[object.type]) { + throw new Exception('Unknown type: ' + object.type, object); + } + if (this.current) { this.parents.unshift(this.current); } -- cgit v1.1