From 00ad57e393be6593c9a405c8b1277582361bd321 Mon Sep 17 00:00:00 2001 From: Anthony Van de Gejuchte Date: Sun, 5 Jun 2016 02:44:59 +0200 Subject: [PATCH] Do not allow newlines in regex --- lib/parse.js | 2 ++ test/mocha/line-endings.js | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) 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); + } + }); }); -- 2.34.1