diff --git a/fuzz/in/tags.html b/fuzz/in/tags.html index de87686..2e76481 100644 --- a/fuzz/in/tags.html +++ b/fuzz/in/tags.html @@ -5,6 +5,7 @@ <title></titl> + let x = 1;
&lt;
x a b c
x a b c
diff --git a/src/minify/attr.rs b/src/minify/attr.rs index 1f50883..c01e23a 100644 --- a/src/minify/attr.rs +++ b/src/minify/attr.rs @@ -312,7 +312,6 @@ pub fn minify_attr( &mut value_raw_wrapped_min, &value_raw_wrapped, &MINIFY_CSS_TRANSFORM_OPTIONS.clone(), - None, ); // If input was invalid, wrapper syntax may not exist anymore. if value_raw_wrapped_min.starts_with(b"x{") { diff --git a/src/minify/css.rs b/src/minify/css.rs index 0ce9321..605b183 100644 --- a/src/minify/css.rs +++ b/src/minify/css.rs @@ -1,8 +1,7 @@ #[cfg(feature = "js-esbuild")] use { crate::minify::esbuild::minify_using_esbuild, - aho_corasick::{AhoCorasick, AhoCorasickBuilder}, - esbuild_rs::{Charset, Loader, SourceMap, TransformOptions, TransformOptionsBuilder}, + esbuild_rs::{Charset, LegalComments, Loader, SourceMap, TransformOptions, TransformOptionsBuilder}, lazy_static::lazy_static, std::sync::Arc, }; @@ -11,9 +10,6 @@ use crate::cfg::Cfg; #[cfg(feature = "js-esbuild")] lazy_static! { - static ref STYLE_END: AhoCorasick = AhoCorasickBuilder::new() - .ascii_case_insensitive(true) - .build(&[" = { let mut builder = TransformOptionsBuilder::new(); builder.charset = Charset::UTF8; @@ -41,7 +37,6 @@ pub fn minify_css(cfg: &Cfg, out: &mut Vec, code: &[u8]) { out, code, &MINIFY_CSS_TRANSFORM_OPTIONS.clone(), - Some(&STYLE_END), ); } } diff --git a/src/minify/esbuild.rs b/src/minify/esbuild.rs index 6f7daba..343d23d 100644 --- a/src/minify/esbuild.rs +++ b/src/minify/esbuild.rs @@ -1,42 +1,20 @@ #[cfg(feature = "js-esbuild")] -use {aho_corasick::AhoCorasick, crossbeam::sync::WaitGroup, esbuild_rs::TransformOptions}; +use {crossbeam::sync::WaitGroup, esbuild_rs::TransformOptions}; #[cfg(feature = "js-esbuild")] // TODO The use of WG is ugly and we don't want to be multi-threaded; wait for Rust port esbuild-transform-rs. -// `tag_to_escape` must be case insensitive if provided. pub fn minify_using_esbuild( out: &mut Vec, code: &[u8], transform_options: &TransformOptions, - tag_to_escape: Option<&'static AhoCorasick>, ) { let wg = WaitGroup::new(); unsafe { let wg = wg.clone(); + // esbuild now officially handles escaping ` out.extend_from_slice(min_code), - // TODO (JS) Handle other forms: - // 1 < /script/.exec(a).length - // ` ${` ${a - // /* - // Considerations: - // - Need to parse strings (e.g. "", '', ``) so syntax within strings aren't mistakenly interpreted as code. - // - Need to be able to parse regex literals to determine string delimiters aren't actually characters in the regex. - // - Determining whether a slash is division or regex requires a full-blown JS parser to handle all cases (this is a well-known JS parsing problem). - // - `/ { - tag_to_escape.replace_all_with_bytes(min_code, out, |_, orig, dst| { - dst.extend(b"<\\/"); - // Keep original case. - dst.extend(&orig[2..]); - true - }) - } - } + out.extend_from_slice(min_code); drop(wg); }); }; diff --git a/src/minify/js.rs b/src/minify/js.rs index d5fabfc..20f553d 100644 --- a/src/minify/js.rs +++ b/src/minify/js.rs @@ -1,7 +1,6 @@ #[cfg(feature = "js-esbuild")] use { crate::minify::esbuild::minify_using_esbuild, - aho_corasick::{AhoCorasick, AhoCorasickBuilder}, esbuild_rs::{Charset, LegalComments, SourceMap, TransformOptions, TransformOptionsBuilder}, lazy_static::lazy_static, std::sync::Arc, @@ -11,9 +10,6 @@ use crate::Cfg; #[cfg(feature = "js-esbuild")] lazy_static! { - static ref SCRIPT_END: AhoCorasick = AhoCorasickBuilder::new() - .ascii_case_insensitive(true) - .build(&[" = { let mut builder = TransformOptionsBuilder::new(); builder.charset = Charset::UTF8; @@ -36,6 +32,10 @@ pub fn minify_js(cfg: &Cfg, out: &mut Vec, code: &[u8]) { if !cfg.minify_js { out.extend_from_slice(&code); } else { - minify_using_esbuild(out, code, &TRANSFORM_OPTIONS.clone(), Some(&SCRIPT_END)); + minify_using_esbuild( + out, + code, + &TRANSFORM_OPTIONS.clone(), + ); } }