Skip to content

Commit

Permalink
fix(es/minifier): Abort on Array.slice with start >= end (#7745)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7742.
  • Loading branch information
kdy1 committed Aug 7, 2023
1 parent 1e6ade8 commit 36ccbec
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 2 deletions.
8 changes: 6 additions & 2 deletions crates/swc_ecma_minifier/src/compress/pure/evaluate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,14 +103,18 @@ impl Pure<'_> {

if let Value::Known(end) = end {
let end = end.floor() as usize;
let end = end.min(arr.elems.len());

if start >= end {
return;
}

self.changed = true;
report_change!(
"evaluate: Reducing array.slice({}, {}) call",
start,
end
);
let end = end.min(arr.elems.len());

if start >= arr.elems.len() {
*e = Expr::Array(ArrayLit {
span: *span,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
console.log([1, 2].slice(1, undefined));
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
console.log([
1,
2
].slice(1, void 0));

1 comment on commit 36ccbec

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 36ccbec Previous: 2258274 Ratio
es/full/bugs-1 281702 ns/iter (± 2972) 293444 ns/iter (± 7265) 0.96
es/full/minify/libraries/antd 1269861182 ns/iter (± 8492392) 1340039380 ns/iter (± 8773715) 0.95
es/full/minify/libraries/d3 271986389 ns/iter (± 7628371) 279873753 ns/iter (± 2566702) 0.97
es/full/minify/libraries/echarts 1021233178 ns/iter (± 16507425) 1088719337 ns/iter (± 33293514) 0.94
es/full/minify/libraries/jquery 82445009 ns/iter (± 711090) 85367558 ns/iter (± 196549) 0.97
es/full/minify/libraries/lodash 95704329 ns/iter (± 901860) 99251946 ns/iter (± 862204) 0.96
es/full/minify/libraries/moment 49282588 ns/iter (± 522087) 50084261 ns/iter (± 65174) 0.98
es/full/minify/libraries/react 17648956 ns/iter (± 293378) 17988288 ns/iter (± 39416) 0.98
es/full/minify/libraries/terser 211242611 ns/iter (± 2923608) 236527797 ns/iter (± 3055034) 0.89
es/full/minify/libraries/three 372861352 ns/iter (± 7444065) 434795421 ns/iter (± 7496945) 0.86
es/full/minify/libraries/typescript 2630633527 ns/iter (± 13869097) 2748269886 ns/iter (± 16790905) 0.96
es/full/minify/libraries/victory 556807915 ns/iter (± 2525632) 606056209 ns/iter (± 9017098) 0.92
es/full/minify/libraries/vue 120046605 ns/iter (± 1038437) 124159561 ns/iter (± 661774) 0.97
es/full/codegen/es3 35006 ns/iter (± 257) 34516 ns/iter (± 80) 1.01
es/full/codegen/es5 35059 ns/iter (± 291) 34629 ns/iter (± 105) 1.01
es/full/codegen/es2015 33771 ns/iter (± 556) 34496 ns/iter (± 43) 0.98
es/full/codegen/es2016 35155 ns/iter (± 160) 34518 ns/iter (± 110) 1.02
es/full/codegen/es2017 35104 ns/iter (± 143) 34517 ns/iter (± 69) 1.02
es/full/codegen/es2018 35045 ns/iter (± 260) 34496 ns/iter (± 55) 1.02
es/full/codegen/es2019 34389 ns/iter (± 495) 34570 ns/iter (± 88) 0.99
es/full/codegen/es2020 35065 ns/iter (± 137) 34525 ns/iter (± 59) 1.02
es/full/all/es3 171299915 ns/iter (± 1160914) 173262277 ns/iter (± 1543950) 0.99
es/full/all/es5 163506462 ns/iter (± 533026) 165300186 ns/iter (± 784625) 0.99
es/full/all/es2015 123279886 ns/iter (± 475936) 124412526 ns/iter (± 850088) 0.99
es/full/all/es2016 122631416 ns/iter (± 797129) 122507122 ns/iter (± 1028805) 1.00
es/full/all/es2017 121179078 ns/iter (± 565688) 123099647 ns/iter (± 947043) 0.98
es/full/all/es2018 119568163 ns/iter (± 876531) 121258678 ns/iter (± 730000) 0.99
es/full/all/es2019 118890278 ns/iter (± 550039) 120107647 ns/iter (± 555594) 0.99
es/full/all/es2020 113981447 ns/iter (± 466541) 115274899 ns/iter (± 620212) 0.99
es/full/parser 533144 ns/iter (± 5663) 532194 ns/iter (± 6313) 1.00
es/full/base/fixer 18281 ns/iter (± 148) 18786 ns/iter (± 204) 0.97
es/full/base/resolver_and_hygiene 81555 ns/iter (± 255) 83068 ns/iter (± 306) 0.98
serialization of serde 289 ns/iter (± 0) 297 ns/iter (± 0) 0.97
css/minify/libraries/bootstrap 29475567 ns/iter (± 89252) 28744072 ns/iter (± 229176) 1.03
css/visitor/compare/clone 1634929 ns/iter (± 5875) 1641298 ns/iter (± 8767) 1.00
css/visitor/compare/visit_mut_span 1773923 ns/iter (± 2603) 1780750 ns/iter (± 7116) 1.00
css/visitor/compare/visit_mut_span_panic 1840122 ns/iter (± 7141) 1848101 ns/iter (± 3902) 1.00
css/visitor/compare/fold_span 2612787 ns/iter (± 7502) 2568565 ns/iter (± 13342) 1.02
css/visitor/compare/fold_span_panic 2749740 ns/iter (± 15328) 2751004 ns/iter (± 21646) 1.00
css/lexer/bootstrap_5_1_3 4429689 ns/iter (± 2790) 4472989 ns/iter (± 6149) 0.99
css/lexer/foundation_6_7_4 3733435 ns/iter (± 3212) 3742302 ns/iter (± 4435) 1.00
css/lexer/tailwind_3_1_1 705741 ns/iter (± 274) 713695 ns/iter (± 325) 0.99
css/parser/bootstrap_5_1_3 19136437 ns/iter (± 38033) 19523772 ns/iter (± 74752) 0.98
css/parser/foundation_6_7_4 15559455 ns/iter (± 20765) 15250813 ns/iter (± 29434) 1.02
css/parser/tailwind_3_1_1 3058607 ns/iter (± 16765) 2995351 ns/iter (± 3680) 1.02
es/codegen/colors 728873 ns/iter (± 396724) 737177 ns/iter (± 403763) 0.99
es/codegen/large 2926898 ns/iter (± 1540581) 2895555 ns/iter (± 1546462) 1.01
es/codegen/with-parser/colors 45007 ns/iter (± 120) 45945 ns/iter (± 159) 0.98
es/codegen/with-parser/large 489693 ns/iter (± 1000) 493301 ns/iter (± 1103) 0.99
es/minify/libraries/antd 1123445677 ns/iter (± 10250249) 1267727925 ns/iter (± 32734994) 0.89
es/minify/libraries/d3 238962345 ns/iter (± 438880) 254223080 ns/iter (± 950485) 0.94
es/minify/libraries/echarts 894582872 ns/iter (± 3000384) 981797404 ns/iter (± 11408644) 0.91
es/minify/libraries/jquery 73485409 ns/iter (± 90650) 77495945 ns/iter (± 1174504) 0.95
es/minify/libraries/lodash 87856102 ns/iter (± 112767) 89943678 ns/iter (± 72625) 0.98
es/minify/libraries/moment 43363276 ns/iter (± 44590) 43903757 ns/iter (± 64827) 0.99
es/minify/libraries/react 16024460 ns/iter (± 42808) 16064350 ns/iter (± 53033) 1.00
es/minify/libraries/terser 185332229 ns/iter (± 331898) 191648632 ns/iter (± 275785) 0.97
es/minify/libraries/three 318338983 ns/iter (± 939903) 335736354 ns/iter (± 812397) 0.95
es/minify/libraries/typescript 2256203028 ns/iter (± 7030669) 2347430560 ns/iter (± 5141143) 0.96
es/minify/libraries/victory 468300502 ns/iter (± 1830678) 501017370 ns/iter (± 3308116) 0.93
es/minify/libraries/vue 106853559 ns/iter (± 118708) 109261622 ns/iter (± 249903) 0.98
es/visitor/compare/clone 1928836 ns/iter (± 4398) 1925218 ns/iter (± 7402) 1.00
es/visitor/compare/visit_mut_span 2264481 ns/iter (± 4772) 2257010 ns/iter (± 2368) 1.00
es/visitor/compare/visit_mut_span_panic 2300883 ns/iter (± 3453) 2310745 ns/iter (± 5410) 1.00
es/visitor/compare/fold_span 3299517 ns/iter (± 4947) 3357756 ns/iter (± 3870) 0.98
es/visitor/compare/fold_span_panic 3436937 ns/iter (± 14611) 3476035 ns/iter (± 6013) 0.99
es/lexer/colors 13117 ns/iter (± 20) 12832 ns/iter (± 69) 1.02
es/lexer/angular 6114416 ns/iter (± 9677) 5940442 ns/iter (± 12921) 1.03
es/lexer/backbone 805162 ns/iter (± 1214) 767423 ns/iter (± 2686) 1.05
es/lexer/jquery 4519430 ns/iter (± 5558) 4365502 ns/iter (± 7058) 1.04
es/lexer/jquery mobile 6879263 ns/iter (± 2922) 6627882 ns/iter (± 71325) 1.04
es/lexer/mootools 3588986 ns/iter (± 2985) 3450247 ns/iter (± 3751) 1.04
es/lexer/underscore 670020 ns/iter (± 562) 649497 ns/iter (± 557) 1.03
es/lexer/three 21311261 ns/iter (± 14581) 20765361 ns/iter (± 13257) 1.03
es/lexer/yui 3846410 ns/iter (± 1786) 3740985 ns/iter (± 2249) 1.03
es/parser/colors 27261 ns/iter (± 120) 27887 ns/iter (± 70) 0.98
es/parser/angular 13506900 ns/iter (± 55441) 14097918 ns/iter (± 73884) 0.96
es/parser/backbone 1975562 ns/iter (± 9188) 2083450 ns/iter (± 9274) 0.95
es/parser/jquery 10794227 ns/iter (± 29510) 11404383 ns/iter (± 67947) 0.95
es/parser/jquery mobile 16518301 ns/iter (± 37049) 17375066 ns/iter (± 203105) 0.95
es/parser/mootools 8337519 ns/iter (± 18367) 8734215 ns/iter (± 29075) 0.95
es/parser/underscore 1710373 ns/iter (± 9171) 1821672 ns/iter (± 7099) 0.94
es/parser/three 46504932 ns/iter (± 195896) 51076489 ns/iter (± 787869) 0.91
es/parser/yui 8265729 ns/iter (± 23322) 8642966 ns/iter (± 46105) 0.96
es/preset-env/usage/builtin_type 137508 ns/iter (± 32865) 140799 ns/iter (± 33768) 0.98
es/preset-env/usage/property 16897 ns/iter (± 52) 16393 ns/iter (± 49) 1.03
es/resolver/typescript 86801452 ns/iter (± 1251814) 91609919 ns/iter (± 837013) 0.95
es/fixer/typescript 61635392 ns/iter (± 346277) 64024457 ns/iter (± 727254) 0.96
es/hygiene/typescript 129851636 ns/iter (± 1085487) 133830691 ns/iter (± 2363453) 0.97
es/resolver_with_hygiene/typescript 241942411 ns/iter (± 954555) 243553152 ns/iter (± 1718306) 0.99
es/visitor/base-perf/module_clone 59769 ns/iter (± 207) 59727 ns/iter (± 565) 1.00
es/visitor/base-perf/fold_empty 63122 ns/iter (± 352) 64287 ns/iter (± 360) 0.98
es/visitor/base-perf/fold_noop_impl_all 63766 ns/iter (± 617) 64046 ns/iter (± 640) 1.00
es/visitor/base-perf/fold_noop_impl_vec 63528 ns/iter (± 707) 63900 ns/iter (± 387) 0.99
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 56 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 40 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 108 ns/iter (± 1) 108 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 77 ns/iter (± 0) 77 ns/iter (± 0) 1
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2517 ns/iter (± 27) 2525 ns/iter (± 15) 1.00
es/base/parallel/resolver/typescript 4455323317 ns/iter (± 246360908) 4467717027 ns/iter (± 187364155) 1.00
es/base/parallel/hygiene/typescript 1441824314 ns/iter (± 23120432) 1438605066 ns/iter (± 13778724) 1.00
misc/visitors/time-complexity/time 5 138 ns/iter (± 1) 125 ns/iter (± 3) 1.10
misc/visitors/time-complexity/time 10 368 ns/iter (± 3) 397 ns/iter (± 7) 0.93
misc/visitors/time-complexity/time 15 521 ns/iter (± 4) 666 ns/iter (± 30) 0.78
misc/visitors/time-complexity/time 20 1046 ns/iter (± 3) 1058 ns/iter (± 19) 0.99
misc/visitors/time-complexity/time 40 3490 ns/iter (± 29) 4126 ns/iter (± 282) 0.85
misc/visitors/time-complexity/time 60 7248 ns/iter (± 20) 7239 ns/iter (± 12) 1.00
es/full-target/es2016 240586 ns/iter (± 1397) 234686 ns/iter (± 779) 1.03
es/full-target/es2017 227160 ns/iter (± 1335) 222612 ns/iter (± 665) 1.02
es/full-target/es2018 215588 ns/iter (± 720) 209777 ns/iter (± 494) 1.03
es2020_nullish_coalescing 71520 ns/iter (± 236) 70579 ns/iter (± 445) 1.01
es2020_optional_chaining 81865 ns/iter (± 593) 79447 ns/iter (± 460) 1.03
es2022_class_properties 121543 ns/iter (± 367) 117942 ns/iter (± 540) 1.03
es2018_object_rest_spread 75708 ns/iter (± 622) 76406 ns/iter (± 303) 0.99
es2019_optional_catch_binding 64676 ns/iter (± 1487) 64640 ns/iter (± 145) 1.00
es2017_async_to_generator 64803 ns/iter (± 231) 64364 ns/iter (± 161) 1.01
es2016_exponentiation 68943 ns/iter (± 230) 68993 ns/iter (± 236) 1.00
es2015_arrow 72306 ns/iter (± 850) 70695 ns/iter (± 182) 1.02
es2015_block_scoped_fn 68627 ns/iter (± 201) 68415 ns/iter (± 330) 1.00
es2015_block_scoping 123524 ns/iter (± 493) 123827 ns/iter (± 607) 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.