diff options
-rw-r--r-- | lib/parse.js | 2 | ||||
-rw-r--r-- | test/mocha/line-endings.js | 22 |
2 files changed, 24 insertions, 0 deletions
diff --git a/lib/parse.js b/lib/parse.js index be103b67..467fc60b 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -490,6 +490,8 @@ function tokenizer($TEXT, filename, html5_comments, shebang) { break; } else if (ch == "\\") { prev_backslash = true; + } else if ("\r\n\u2028\u2029".indexOf(ch) >= 0) { + parse_error("Unexpected line terminator"); } else { regexp += ch; } diff --git a/test/mocha/line-endings.js b/test/mocha/line-endings.js index 8fd56a19..3457dd70 100644 --- a/test/mocha/line-endings.js +++ b/test/mocha/line-endings.js @@ -30,5 +30,27 @@ describe("line-endings", function() { var result = Uglify.minify(js, options); assert.strictEqual(result.code, expected_code); }); + + it("Should not allow line terminators in regexp", function() { + var inputs = [ + "/\n/", + "/\r/", + "/\u2028/", + "/\u2029/", + "/someRandomTextLike[]()*AndThen\n/" + ] + var test = function(input) { + return function() { + Uglify.parse(input); + } + } + var fail = function(e) { + return e instanceof Uglify.JS_Parse_Error && + e.message === "Unexpected line terminator"; + } + for (var i = 0; i < inputs.length; i++) { + assert.throws(test(inputs[i]), fail); + } + }); }); |