aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-16 00:32:29 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-16 00:32:29 -0800
commitfe55720c6c022ab24f23cf452973071dfc2b67ae (patch)
treee24019105c0e2653400935e1538636f91c009b12
parent08e8eabc6f1fdf5a58da0196462cba38b87c18d8 (diff)
downloadbun-fe55720c6c022ab24f23cf452973071dfc2b67ae.tar.gz
bun-fe55720c6c022ab24f23cf452973071dfc2b67ae.tar.zst
bun-fe55720c6c022ab24f23cf452973071dfc2b67ae.zip
[JS Parser] Add error when RegExp has duplicate flag
-rw-r--r--src/js_lexer.zig14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/js_lexer.zig b/src/js_lexer.zig
index 1f6c39989..282cac680 100644
--- a/src/js_lexer.zig
+++ b/src/js_lexer.zig
@@ -1815,6 +1815,10 @@ fn NewLexer_(
lexer.step();
var has_set_flags_start = false;
+ const min_flag = comptime std.mem.min(u8, "gimsuy");
+ const max_flag = comptime std.mem.max(u8, "gimsuy");
+ const RegexpFlags = std.bit_set.IntegerBitSet((max_flag - min_flag) + 1);
+ var flags = RegexpFlags.initEmpty();
while (isIdentifierContinue(lexer.code_point)) {
switch (lexer.code_point) {
'g', 'i', 'm', 's', 'u', 'y' => {
@@ -1822,6 +1826,16 @@ fn NewLexer_(
lexer.regex_flags_start = @truncate(u16, lexer.end - lexer.start);
has_set_flags_start = true;
}
+ const flag = max_flag - @intCast(u8, lexer.code_point);
+ if (flags.isSet(flag)) {
+ lexer.addError(
+ lexer.regex_flags_start.?,
+ "Duplicate flag \"{u}\" in regular expression",
+ .{@intCast(u21, lexer.code_point)},
+ false,
+ );
+ }
+ flags.set(flag);
lexer.step();
},