From ff52f47537c9bf5c6acc636f25ae5f7f70d20f3b Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Fri, 15 Oct 2010 14:06:30 -0700 Subject: Fix unicode parsing Close #56 --- src/Parser.js | 4 ++++ test/ParserSpec.js | 15 ++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Parser.js b/src/Parser.js index 2c681be0..9082bb2a 100644 --- a/src/Parser.js +++ b/src/Parser.js @@ -170,6 +170,10 @@ function lex(text, parseStrings){ if (escape) { if (ch == 'u') { var hex = text.substring(index + 1, index + 5); + if (!hex.match(/[\da-f]{4}/i)) + throw "Lexer Error: Invalid unicode escape [\\u" + + hex + "] starting at column '" + + start + "' in expression '" + text + "'."; index += 4; string += String.fromCharCode(parseInt(hex, 16)); } else { diff --git a/test/ParserSpec.js b/test/ParserSpec.js index e7b4e7f5..ac359cb0 100644 --- a/test/ParserSpec.js +++ b/test/ParserSpec.js @@ -1,4 +1,4 @@ -desccribe('parser', function(){ +describe('parser', function(){ describe('lexer', function(){ it('should TokenizeAString', function(){ var tokens = lex("a.bc[22]+1.3|f:'a\\\'c':\"d\\\"e\""); @@ -170,6 +170,13 @@ desccribe('parser', function(){ var tokens = lex(".5"); expect(tokens[0].text).toEqual(0.5); }); + + it('should throw error on invalid unicode', function(){ + assertThrows("Lexer Error: Invalid unicode escape [\\u1''b] starting at column '0' in expression ''\\u1''bla''.", function(){ + lex("'\\u1''bla'"); + }); + }); + }); it('should parse Expressions', function(){ @@ -400,12 +407,6 @@ desccribe('parser', function(){ assertEquals('misko', scope.$eval('n')); }); - it('should parse FiltersCanBeGrouped', function () { - var scope = createScope({name:'MISKO'}); - assertEquals('misko', scope.$eval('n = (name|lowercase)')); - assertEquals('misko', scope.$eval('n')); - }); - it('should parse Remainder', function () { var scope = createScope(); assertEquals(1, scope.$eval('1%2')); -- cgit v1.2.3