From 4869ccfa55121ba707cefacde4af701c49383156 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke
Date: Tue, 25 Mar 2014 17:45:58 +0100
Subject: [PATCH] Prevent loose parser from tripping on invalid regexps
Issue #39
---
acorn.js | 4 ++--
acorn_loose.js | 2 ++
index.html | 4 ++--
3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/acorn.js b/acorn.js
index 63abcce77f..31935f41a5 100644
--- a/acorn.js
+++ b/acorn.js
@@ -773,11 +773,11 @@
// Need to use `readWord1` because '\uXXXX' sequences are allowed
// here (don't ask).
var mods = readWord1();
- if (mods && !/^[gmsiy]*$/.test(mods)) raise(start, "Invalid regexp flag");
+ if (mods && !/^[gmsiy]*$/.test(mods)) raise(start, "Invalid regular expression flag");
try {
var value = new RegExp(content, mods);
} catch (e) {
- if (e instanceof SyntaxError) raise(start, e.message);
+ if (e instanceof SyntaxError) raise(start, "Error parsing regular expression: " + e.message);
raise(e);
}
return finishToken(_regexp, value);
diff --git a/acorn_loose.js b/acorn_loose.js
index 79cc15f616..1c6fb46fd6 100644
--- a/acorn_loose.js
+++ b/acorn_loose.js
@@ -106,6 +106,8 @@
} else if (/unexpected character/i.test(msg)) {
pos++;
replace = false;
+ } else if (/regular expression/i.test(msg)) {
+ replace = true;
} else {
throw e;
}
diff --git a/index.html b/index.html
index edbc4ca823..0e2d6e6361 100644
--- a/index.html
+++ b/index.html
@@ -536,11 +536,11 @@ since a '/' inside a '[]' set does not end the expression.
var content = input.slice(start, tokPos);
++tokPos; | Need to use readWord1 because '\uXXXX' sequences are allowed
here (don't ask). | var mods = readWord1();
- if (mods && !/^[gmsiy]*$/.test(mods)) raise(start, "Invalid regexp flag");
+ if (mods && !/^[gmsiy]*$/.test(mods)) raise(start, "Invalid regular expression flag");
try {
var value = new RegExp(content, mods);
} catch (e) {
- if (e instanceof SyntaxError) raise(start, e.message);
+ if (e instanceof SyntaxError) raise(start, "Error parsing regular expression: " + e.message);
raise(e);
}
return finishToken(_regexp, value);
|