diff options
author | kpdecker <kpdecker@gmail.com> | 2013-11-03 10:54:24 -0600 |
---|---|---|
committer | kpdecker <kpdecker@gmail.com> | 2013-11-03 10:58:37 -0600 |
commit | ded0a1617fda248252a92d71b12c62a5e8536c33 (patch) | |
tree | 62ee34c5f6d749365872bd8f37a74a1431d66017 /lib/handlebars/compiler/javascript-compiler.js | |
parent | 88fefc1521641084d18fe1abf9697a852eedf28c (diff) | |
download | handlebars.js-ded0a1617fda248252a92d71b12c62a5e8536c33.zip handlebars.js-ded0a1617fda248252a92d71b12c62a5e8536c33.tar.gz handlebars.js-ded0a1617fda248252a92d71b12c62a5e8536c33.tar.bz2 |
Protect context-lookups from undefined values
Fixes #166
Fixes #587
Diffstat (limited to 'lib/handlebars/compiler/javascript-compiler.js')
-rw-r--r-- | lib/handlebars/compiler/javascript-compiler.js | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/handlebars/compiler/javascript-compiler.js b/lib/handlebars/compiler/javascript-compiler.js index b04ef1a..57af1d4 100644 --- a/lib/handlebars/compiler/javascript-compiler.js +++ b/lib/handlebars/compiler/javascript-compiler.js @@ -10,13 +10,25 @@ JavaScriptCompiler.prototype = { // PUBLIC API: You can override these methods in a subclass to provide // alternative compiled forms for name lookup and buffering semantics nameLookup: function(parent, name /* , type*/) { + var wrap, + ret; + if (parent.indexOf('depth') === 0) { + wrap = true; + } + if (/^[0-9]+$/.test(name)) { - return parent + "[" + name + "]"; + ret = parent + "[" + name + "]"; } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) { - return parent + "." + name; + ret = parent + "." + name; } else { - return parent + "['" + name + "']"; + ret = parent + "['" + name + "']"; + } + + if (wrap) { + return '(' + parent + ' && ' + ret + ')'; + } else { + return ret; } }, |