aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/parse.js2
-rw-r--r--test/mocha/line-endings.js22
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);
+ }
+ });
});