Skip to content

events: refactor to be less susceptible to prototype pollution #47966

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

aduh95
Copy link
Contributor

@aduh95 aduh95 commented May 11, 2023

No description provided.

@aduh95 aduh95 added the needs-benchmark-ci PR that need a benchmark CI run. label May 11, 2023
@nodejs-github-bot nodejs-github-bot added events Issues and PRs related to the events subsystem / EventEmitter. needs-ci PRs that need a full CI run. labels May 11, 2023
@aduh95
Copy link
Contributor Author

aduh95 commented May 11, 2023

Benchmark CI: https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1337/

                                                                 confidence improvement accuracy (*)    (**)   (***)
events/ee-add-remove.js n=1000000 removeListener=0 newListener=0                 0.44 %       ±1.44%  ±1.91%  ±2.49%
events/ee-add-remove.js n=1000000 removeListener=0 newListener=1                 0.96 %       ±1.02%  ±1.36%  ±1.77%
events/ee-add-remove.js n=1000000 removeListener=1 newListener=0         **      1.93 %       ±1.18%  ±1.57%  ±2.05%
events/ee-add-remove.js n=1000000 removeListener=1 newListener=1                -0.18 %       ±1.04%  ±1.39%  ±1.81%
events/ee-emit.js listeners=1 argc=0 n=2000000                          ***    -20.40 %       ±6.23%  ±8.28% ±10.78%
events/ee-emit.js listeners=1 argc=10 n=2000000                         ***    -24.61 %       ±4.16%  ±5.56%  ±7.29%
events/ee-emit.js listeners=1 argc=2 n=2000000                          ***    -17.64 %       ±8.22% ±10.95% ±14.28%
events/ee-emit.js listeners=1 argc=4 n=2000000                          ***    -22.84 %       ±3.27%  ±4.36%  ±5.67%
events/ee-emit.js listeners=10 argc=0 n=2000000                                  0.70 %       ±6.51%  ±8.67% ±11.29%
events/ee-emit.js listeners=10 argc=10 n=2000000                          *      3.58 %       ±3.53%  ±4.69%  ±6.11%
events/ee-emit.js listeners=10 argc=2 n=2000000                           *      6.03 %       ±4.75%  ±6.32%  ±8.23%
events/ee-emit.js listeners=10 argc=4 n=2000000                          **      6.76 %       ±4.07%  ±5.43%  ±7.11%
events/ee-emit.js listeners=5 argc=0 n=2000000                                  -0.05 %       ±6.39%  ±8.51% ±11.11%
events/ee-emit.js listeners=5 argc=10 n=2000000                                  4.64 %       ±5.18%  ±6.89%  ±8.98%
events/ee-emit.js listeners=5 argc=2 n=2000000                                   1.57 %       ±7.99% ±10.63% ±13.83%
events/ee-emit.js listeners=5 argc=4 n=2000000                                   5.65 %       ±7.09%  ±9.44% ±12.29%
events/ee-listen-unique.js n=1000000 events=1                                   -0.55 %       ±1.26%  ±1.68%  ±2.19%
events/ee-listen-unique.js n=1000000 events=10                                   0.46 %       ±2.35%  ±3.12%  ±4.06%
events/ee-listen-unique.js n=1000000 events=2                                    0.24 %       ±1.07%  ±1.43%  ±1.86%
events/ee-listen-unique.js n=1000000 events=20                                   0.04 %       ±1.63%  ±2.17%  ±2.82%
events/ee-listen-unique.js n=1000000 events=3                                   -0.15 %       ±1.10%  ±1.46%  ±1.90%
events/ee-listen-unique.js n=1000000 events=5                                    0.20 %       ±0.97%  ±1.29%  ±1.68%
events/ee-listener-count-on-prototype.js n=50000000                              0.61 %       ±3.23%  ±4.29%  ±5.59%
events/ee-listeners.js raw='false' listeners=5 n=5000000                  *      7.18 %       ±6.90%  ±9.18% ±11.95%
events/ee-listeners.js raw='false' listeners=50 n=5000000                       -0.37 %       ±1.35%  ±1.80%  ±2.34%
events/ee-listeners.js raw='true' listeners=5 n=5000000                         -2.57 %       ±9.62% ±12.80% ±16.66%
events/ee-listeners.js raw='true' listeners=50 n=5000000                        -0.80 %       ±3.95%  ±5.26%  ±6.85%
events/ee-once.js argc=0 n=20000000                                     ***     -7.20 %       ±0.60%  ±0.80%  ±1.04%
events/ee-once.js argc=1 n=20000000                                     ***     -7.95 %       ±0.41%  ±0.55%  ±0.72%
events/ee-once.js argc=4 n=20000000                                     ***     -7.56 %       ±0.52%  ±0.69%  ±0.90%
events/ee-once.js argc=5 n=20000000                                     ***     -7.29 %       ±0.47%  ±0.62%  ±0.81%
events/eventtarget-add-remove.js nListener=10 n=1000000                         -0.01 %       ±0.36%  ±0.48%  ±0.62%
events/eventtarget-add-remove.js nListener=5 n=1000000                          -0.14 %       ±0.55%  ±0.74%  ±0.96%
events/eventtarget-creation.js n=1000000                                        -6.11 %       ±9.76% ±12.99% ±16.90%
events/eventtarget.js listeners=1 n=1000000                                      1.06 %      ±10.05% ±13.38% ±17.42%
events/eventtarget.js listeners=10 n=1000000                                    -1.08 %       ±4.22%  ±5.62%  ±7.32%
events/eventtarget.js listeners=5 n=1000000                                      0.68 %       ±5.70%  ±7.59%  ±9.88%

@RaisinTen
Copy link
Member

There are some regressions :/

@aduh95
Copy link
Contributor Author

aduh95 commented May 12, 2023

Benchmark CI: https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1338/

Results
                                                                 confidence improvement accuracy (*)    (**)   (***)
events/ee-add-remove.js n=1000000 removeListener=0 newListener=0                 0.23 %       ±1.06%  ±1.42%  ±1.84%
events/ee-add-remove.js n=1000000 removeListener=0 newListener=1                 0.76 %       ±1.21%  ±1.61%  ±2.09%
events/ee-add-remove.js n=1000000 removeListener=1 newListener=0        ***      2.30 %       ±1.23%  ±1.64%  ±2.13%
events/ee-add-remove.js n=1000000 removeListener=1 newListener=1                -0.49 %       ±1.28%  ±1.70%  ±2.22%
events/ee-emit.js listeners=1 argc=0 n=2000000                          ***    -23.37 %       ±7.66% ±10.21% ±13.32%
events/ee-emit.js listeners=1 argc=10 n=2000000                         ***    -24.98 %       ±6.21%  ±8.27% ±10.79%
events/ee-emit.js listeners=1 argc=2 n=2000000                          ***    -20.11 %       ±8.02% ±10.68% ±13.92%
events/ee-emit.js listeners=1 argc=4 n=2000000                          ***    -23.31 %       ±4.30%  ±5.72%  ±7.44%
events/ee-emit.js listeners=10 argc=0 n=2000000                                 -1.40 %       ±6.41%  ±8.52% ±11.10%
events/ee-emit.js listeners=10 argc=10 n=2000000                                 0.19 %       ±3.71%  ±4.94%  ±6.44%
events/ee-emit.js listeners=10 argc=2 n=2000000                          **      6.76 %       ±4.53%  ±6.02%  ±7.84%
events/ee-emit.js listeners=10 argc=4 n=2000000                                  2.38 %       ±2.73%  ±3.63%  ±4.72%
events/ee-emit.js listeners=5 argc=0 n=2000000                                  -2.01 %       ±6.98%  ±9.31% ±12.16%
events/ee-emit.js listeners=5 argc=10 n=2000000                                  2.00 %       ±6.06%  ±8.07% ±10.51%
events/ee-emit.js listeners=5 argc=2 n=2000000                                  -2.42 %       ±6.99%  ±9.30% ±12.10%
events/ee-emit.js listeners=5 argc=4 n=2000000                                   6.47 %       ±6.62%  ±8.82% ±11.49%
events/ee-listen-unique.js n=1000000 events=1                                   -0.27 %       ±1.69%  ±2.25%  ±2.94%
events/ee-listen-unique.js n=1000000 events=10                                  -1.23 %       ±2.48%  ±3.30%  ±4.30%
events/ee-listen-unique.js n=1000000 events=2                                   -0.79 %       ±1.12%  ±1.48%  ±1.93%
events/ee-listen-unique.js n=1000000 events=20                           **      2.27 %       ±1.51%  ±2.01%  ±2.62%
events/ee-listen-unique.js n=1000000 events=3                                   -0.93 %       ±1.05%  ±1.39%  ±1.81%
events/ee-listen-unique.js n=1000000 events=5                                    0.04 %       ±1.10%  ±1.47%  ±1.92%
events/ee-listener-count-on-prototype.js n=50000000                             -1.91 %       ±3.41%  ±4.54%  ±5.91%
events/ee-listeners.js raw='false' listeners=5 n=5000000                         1.54 %       ±6.37%  ±8.47% ±11.03%
events/ee-listeners.js raw='false' listeners=50 n=5000000                        0.05 %       ±1.63%  ±2.16%  ±2.82%
events/ee-listeners.js raw='true' listeners=5 n=5000000                          5.97 %       ±9.69% ±12.91% ±16.82%
events/ee-listeners.js raw='true' listeners=50 n=5000000                        -1.15 %       ±3.58%  ±4.76%  ±6.20%
events/ee-once.js argc=0 n=20000000                                     ***     -1.52 %       ±0.68%  ±0.90%  ±1.17%
events/ee-once.js argc=1 n=20000000                                      **     -1.10 %       ±0.64%  ±0.85%  ±1.12%
events/ee-once.js argc=4 n=20000000                                     ***     -1.38 %       ±0.65%  ±0.86%  ±1.12%
events/ee-once.js argc=5 n=20000000                                             -0.36 %       ±0.83%  ±1.10%  ±1.43%
events/eventtarget-add-remove.js nListener=10 n=1000000                          0.09 %       ±0.31%  ±0.42%  ±0.54%
events/eventtarget-add-remove.js nListener=5 n=1000000                          -0.11 %       ±0.74%  ±0.98%  ±1.28%
events/eventtarget-creation.js n=1000000                                         2.28 %      ±10.75% ±14.30% ±18.62%
events/eventtarget.js listeners=1 n=1000000                                     -6.11 %       ±9.87% ±13.14% ±17.11%
events/eventtarget.js listeners=10 n=1000000                                    -0.16 %       ±4.11%  ±5.47%  ±7.11%
events/eventtarget.js listeners=5 n=1000000                                     -2.30 %       ±5.40%  ±7.18%  ±9.35%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 37 comparisons, you can thus
expect the following amount of false-positive results:
  1.85 false positives, when considering a   5% risk acceptance (*, **, ***),
  0.37 false positives, when considering a   1% risk acceptance (**, ***),
  0.04 false positives, when considering a 0.1% risk acceptance (***)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
events Issues and PRs related to the events subsystem / EventEmitter. needs-benchmark-ci PR that need a benchmark CI run. needs-ci PRs that need a full CI run.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants