diff options
| author | Misko Hevery | 2011-01-04 13:23:39 -0800 | 
|---|---|---|
| committer | Misko Hevery | 2011-01-04 13:25:49 -0800 | 
| commit | 5f080193cbc0d84676cf267adcdc6307fb601610 (patch) | |
| tree | 3b10cdc1b09968c8ff185a708bc20219a3b6062d /src/parser.js | |
| parent | cf891428bf3049b769d09946ec45b99cd1939d7c (diff) | |
| download | angular.js-5f080193cbc0d84676cf267adcdc6307fb601610.tar.bz2 | |
Added an extra security check to make sure that the parser can not execute anything while evaluting JSON.
Diffstat (limited to 'src/parser.js')
| -rw-r--r-- | src/parser.js | 35 | 
1 files changed, 27 insertions, 8 deletions
diff --git a/src/parser.js b/src/parser.js index d233b15f..4227a6c8 100644 --- a/src/parser.js +++ b/src/parser.js @@ -216,7 +216,26 @@ function lex(text, parseStringsForObjects){  function parser(text, json){    var ZERO = valueFn(0), -      tokens = lex(text, json); +      tokens = lex(text, json), +      assignment = _assignment,  +      functionCall = _functionCall,  +      fieldAccess = _fieldAccess,  +      objectIndex = _objectIndex,  +      filterChain = _filterChain,  +      functionIdent = _functionIdent,  +      pipeFunction = _pipeFunction; +  if(json){ +    // The extra level of aliasing is here, just in case the lexer misses something, so that  +    // we prevent any accidental execution in JSON. +    assignment = logicalOR; +    functionCall =  +      fieldAccess =  +      objectIndex =  +      filterChain =  +      functionIdent =  +      pipeFunction =  +        function (){ throwError("is not valid json", {text:text, index:0}); }; +  }    return {        assertAllConsumed: assertAllConsumed,        primary: primary, @@ -314,7 +333,7 @@ function parser(text, json){      }    } -  function filterChain(){ +  function _filterChain(){      var left = expression();      var token;      while(true) { @@ -334,7 +353,7 @@ function parser(text, json){      return pipeFunction(angularValidator);    } -  function pipeFunction(fnScope){ +  function _pipeFunction(fnScope){      var fn = functionIdent(fnScope);      var argsFn = [];      var token; @@ -360,7 +379,7 @@ function parser(text, json){      return assignment();    } -  function assignment(){ +  function _assignment(){      var left = logicalOR();      var right;      var token; @@ -448,7 +467,7 @@ function parser(text, json){      }    } -  function functionIdent(fnScope) { +  function _functionIdent(fnScope) {      var token = expect();      var element = token.text.split('.');      var instance = fnScope; @@ -496,7 +515,7 @@ function parser(text, json){      return primary;    } -  function fieldAccess(object) { +  function _fieldAccess(object) {      var field = expect().text;      var getter = getterFn(field);      return extend(function (self){ @@ -508,7 +527,7 @@ function parser(text, json){      });    } -  function objectIndex(obj) { +  function _objectIndex(obj) {      var indexFn = expression();      consume(']');      return extend( @@ -523,7 +542,7 @@ function parser(text, json){        });    } -  function functionCall(fn) { +  function _functionCall(fn) {      var argsFn = [];      if (peekToken().text != ')') {        do {  | 
