diff options
| -rw-r--r-- | src/parser.js | 10 | ||||
| -rw-r--r-- | test/JsonSpec.js | 7 | 
2 files changed, 12 insertions, 5 deletions
| diff --git a/src/parser.js b/src/parser.js index 8dc8f9c2..77800209 100644 --- a/src/parser.js +++ b/src/parser.js @@ -101,26 +101,26 @@ function lex(text, parseStringsForObjects){             '_' == ch || ch == '$';    }    function isExpOperator(ch) { -    return ch == '-' || ch == '+'; +    return ch == '-' || ch == '+' || isNumber(ch);    }    function readNumber() {      var number = "";      var start = index;      while (index < text.length) { -      var ch = text.charAt(index); +      var ch = lowercase(text.charAt(index));        if (ch == '.' || isNumber(ch)) {          number += ch;        } else {          var peekCh = peek(); -        if (ch == 'E' && isExpOperator(peekCh)) { +        if (ch == 'e' && isExpOperator(peekCh)) {            number += ch;          } else if (isExpOperator(ch) &&              peekCh && isNumber(peekCh) && -            number.charAt(number.length - 1) == 'E') { +            number.charAt(number.length - 1) == 'e') {            number += ch;          } else if (isExpOperator(ch) &&              (!peekCh || !isNumber(peekCh)) && -            number.charAt(number.length - 1) == 'E') { +            number.charAt(number.length - 1) == 'e') {            throw 'Lexer found invalid exponential value "' + text + '"';          } else {            break; diff --git a/test/JsonSpec.js b/test/JsonSpec.js index 052c239c..e91f50cd 100644 --- a/test/JsonSpec.js +++ b/test/JsonSpec.js @@ -109,6 +109,13 @@ describe('json', function(){      expect(fromJson("{neg:-2.55, pos:+.3, a:[-2, +.1, -.2, +.3]}")).toEqual({neg:-2.55, pos:+.3, a:[-2, +.1, -.2, +.3]});    }); +  it('should parse exponents', function() { +    expect(fromJson("{exp:1.2E10}")).toEqual({exp:1.2E10}); +    expect(fromJson("{exp:1.2E-10}")).toEqual({exp:1.2E-10}); +    expect(fromJson("{exp:1.2e+10}")).toEqual({exp:1.2E10}); +    expect(fromJson("{exp:1.2e-10}")).toEqual({exp:1.2E-10}); +  }); +    describe('security', function(){      it('should not allow naked expressions', function(){        expect(function(){fromJson('1+2');}).toThrow("Did not understand '+2' while evaluating '1+2'."); | 
