From 88b7ddb7e0d1c46995a6a2c5f49bdb5236519b50 Mon Sep 17 00:00:00 2001 From: leaysgur <6259812+leaysgur@users.noreply.github.com> Date: Fri, 6 Sep 2024 03:28:33 +0000 Subject: [PATCH] fix(regular_expression): Handle unterminated character class (#5523) `/[/` is reported by `debug_assert!`, but should not. --- crates/oxc_regular_expression/src/body_parser/mod.rs | 4 ++++ crates/oxc_regular_expression/src/body_parser/parser.rs | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/oxc_regular_expression/src/body_parser/mod.rs b/crates/oxc_regular_expression/src/body_parser/mod.rs index be0e18bd65dcf..f2612fbf5abfb 100644 --- a/crates/oxc_regular_expression/src/body_parser/mod.rs +++ b/crates/oxc_regular_expression/src/body_parser/mod.rs @@ -171,6 +171,10 @@ mod test { ("(?=a){1}", ParserOptions::default().with_unicode_mode()), ("(?!a){1}", ParserOptions::default().with_unicode_mode()), (r"[\d-\D]", ParserOptions::default().with_unicode_mode()), + ("[", ParserOptions::default()), + ("[", ParserOptions::default().with_unicode_sets_mode()), + ("[[", ParserOptions::default().with_unicode_sets_mode()), + ("[[]", ParserOptions::default().with_unicode_sets_mode()), ("[z-a]", ParserOptions::default()), (r"[a-c]]", ParserOptions::default().with_unicode_mode()), ( diff --git a/crates/oxc_regular_expression/src/body_parser/parser.rs b/crates/oxc_regular_expression/src/body_parser/parser.rs index 4d180c1bada40..e65ddedc6ea10 100644 --- a/crates/oxc_regular_expression/src/body_parser/parser.rs +++ b/crates/oxc_regular_expression/src/body_parser/parser.rs @@ -771,7 +771,10 @@ impl<'a> PatternParser<'a> { &mut self, ) -> Result<(ast::CharacterClassContentsKind, Vec<'a, ast::CharacterClassContents<'a>>)> { // [empty] - if self.reader.peek().filter(|&cp| cp == ']' as u32).is_some() { + if self.reader.peek().filter(|&cp| cp == ']' as u32).is_some() + // Unterminated + || self.reader.peek().is_none() + { return Ok((ast::CharacterClassContentsKind::Union, Vec::new_in(self.allocator))); }