Skip to content
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

Fix panic in regex execution #1283

Merged
merged 3 commits into from
May 27, 2021
Merged

Fix panic in regex execution #1283

merged 3 commits into from
May 27, 2021

Conversation

0x7D2B
Copy link
Contributor

@0x7D2B 0x7D2B commented May 25, 2021

This Pull Request fixes #1242, though that one might be accidentally triggering a different panic that's fixed in #1280

@0x7D2B 0x7D2B added bug Something isn't working builtins PRs and Issues related to builtins/intrinsics execution Issues or PRs related to code execution rust Pull requests that update Rust code labels May 25, 2021
@0x7D2B 0x7D2B requested a review from Razican May 25, 2021 12:58
@0x7D2B
Copy link
Contributor Author

0x7D2B commented May 25, 2021

The spec actually wants ToLength and not ToIndex for lastIndex. Makes sense, right?

@github-actions
Copy link

github-actions bot commented May 25, 2021

Test262 conformance changes:

Test result master count PR count difference
Total 78,873 78,873 0
Passed 26,622 26,628 +6
Ignored 15,604 15,604 0
Failed 36,647 36,641 -6
Panics 22 22 0
Conformance 33.75% 33.76% +0.01%

@github-actions
Copy link

Benchmark for 62f67b5

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 310.8±0.16ns 302.2±0.15ns +2.85%
Arithmetic operations (Full) 225.1±4.34µs 228.2±0.26µs -1.36%
Array access (Execution) 5.2±0.02µs 5.3±0.02µs -1.89%
Array access (Full) 248.7±0.30µs 254.4±0.66µs -2.24%
Array creation (Execution) 2.4±0.00ms 2.4±0.01ms 0.00%
Array creation (Full) 2.8±0.02ms 2.8±0.00ms 0.00%
Array pop (Execution) 779.9±1.51µs 780.4±2.24µs -0.06%
Array pop (Full) 1204.6±6.83µs 1199.2±1.29µs +0.45%
Boolean Object Access (Execution) 4.5±0.01µs 4.5±0.00µs 0.00%
Boolean Object Access (Full) 242.7±5.72µs 249.8±0.44µs -2.84%
Clean js (Execution) 551.6±3.10µs 558.2±5.00µs -1.18%
Clean js (Full) 829.9±2.73µs 827.3±3.54µs +0.31%
Clean js (Parser) 36.3±0.06µs 36.5±0.07µs -0.55%
Create Realm 360.3±0.54ns 351.6±2.73ns +2.47%
Dynamic Object Property Access (Execution) 4.2±0.01µs 4.3±0.00µs -2.33%
Dynamic Object Property Access (Full) 245.7±1.30µs 249.6±0.36µs -1.56%
Expression (Parser) 6.2±0.00µs 6.2±0.01µs 0.00%
Fibonacci (Execution) 641.9±1.45µs 642.5±1.94µs -0.09%
Fibonacci (Full) 903.3±1.10µs 900.8±1.06µs +0.28%
For loop (Execution) 18.4±0.16µs 18.5±0.05µs -0.54%
For loop (Full) 257.2±3.32µs 259.9±0.32µs -1.04%
For loop (Parser) 17.4±0.03µs 17.3±0.04µs +0.58%
Goal Symbols (Parser) 12.2±0.04µs 12.2±0.02µs 0.00%
Hello World (Parser) 3.4±0.01µs 3.4±0.00µs 0.00%
Long file (Parser) 730.1±9.18ns 723.7±9.59ns +0.88%
Mini js (Execution) 496.7±2.54µs 500.4±2.68µs -0.74%
Mini js (Full) 771.1±3.54µs 771.2±2.39µs -0.01%
Mini js (Parser) 31.7±0.30µs 31.7±0.50µs 0.00%
Number Object Access (Execution) 3.5±0.14µs 3.4±0.00µs +2.94%
Number Object Access (Full) 237.6±0.29µs 244.8±0.64µs -2.94%
Object Creation (Execution) 3.7±0.01µs 3.6±0.01µs +2.78%
Object Creation (Full) 241.2±0.30µs 246.1±0.39µs -1.99%
RegExp (Execution) 10.0±0.02µs 10.0±0.02µs 0.00%
RegExp (Full) 254.8±0.36µs 258.9±0.38µs -1.58%
RegExp Literal (Execution) 10.0±0.02µs 10.0±0.02µs 0.00%
RegExp Literal (Full) 250.2±1.18µs 260.5±0.64µs -3.95%
RegExp Literal Creation (Execution) 8.7±0.02µs 8.8±0.03µs -1.14%
RegExp Literal Creation (Full) 246.5±0.37µs 251.6±0.68µs -2.03%
Static Object Property Access (Execution) 3.8±0.02µs 3.8±0.02µs 0.00%
Static Object Property Access (Full) 241.5±0.29µs 247.6±0.32µs -2.46%
String Object Access (Execution) 6.2±0.03µs 6.0±0.03µs +3.33%
String Object Access (Full) 246.7±0.29µs 256.3±0.25µs -3.75%
String comparison (Execution) 5.5±0.02µs 5.5±0.02µs 0.00%
String comparison (Full) 243.2±0.51µs 253.0±0.69µs -3.87%
String concatenation (Execution) 4.5±0.01µs 4.5±0.05µs 0.00%
String concatenation (Full) 235.8±0.21µs 244.5±0.32µs -3.56%
String copy (Execution) 3.3±0.01µs 3.3±0.01µs 0.00%
String copy (Full) 231.1±0.22µs 241.9±0.46µs -4.46%
Symbols (Execution) 2.8±0.01µs 2.8±0.03µs 0.00%
Symbols (Full) 226.9±0.47µs 235.4±0.39µs -3.61%

@github-actions
Copy link

Benchmark for 0818193

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 404.4±22.59ns 410.6±28.40ns -1.51%
Arithmetic operations (Full) 330.8±21.31µs 320.7±11.62µs +3.15%
Array access (Execution) 7.7±0.65µs 7.5±0.43µs +2.67%
Array access (Full) 356.0±15.62µs 351.4±13.30µs +1.31%
Array creation (Execution) 3.1±0.16ms 3.1±0.12ms 0.00%
Array creation (Full) 3.4±0.12ms 3.5±0.20ms -2.86%
Array pop (Execution) 988.6±30.93µs 999.7±46.87µs -1.11%
Array pop (Full) 1550.4±118.49µs 1535.9±61.04µs +0.94%
Boolean Object Access (Execution) 6.1±0.28µs 6.1±0.32µs 0.00%
Boolean Object Access (Full) 345.4±20.59µs 337.9±9.90µs +2.22%
Clean js (Execution) 750.5±24.12µs 738.8±21.92µs +1.58%
Clean js (Full) 1101.4±48.42µs 1092.5±46.43µs +0.81%
Clean js (Parser) 48.5±3.76µs 47.3±3.36µs +2.54%
Create Realm 467.0±31.94ns 456.1±14.93ns +2.39%
Dynamic Object Property Access (Execution) 6.1±0.27µs 6.3±0.48µs -3.17%
Dynamic Object Property Access (Full) 348.7±15.92µs 346.8±16.95µs +0.55%
Expression (Parser) 7.9±0.54µs 7.8±0.34µs +1.28%
Fibonacci (Execution) 978.4±53.20µs 967.3±131.03µs +1.15%
Fibonacci (Full) 1312.2±124.45µs 1295.0±78.40µs +1.33%
For loop (Execution) 26.2±1.72µs 25.6±1.86µs +2.34%
For loop (Full) 371.7±36.24µs 361.4±16.16µs +2.85%
For loop (Parser) 23.0±0.95µs 22.7±0.72µs +1.32%
Goal Symbols (Parser) 15.7±0.84µs 15.7±0.81µs 0.00%
Hello World (Parser) 4.4±0.29µs 4.4±0.17µs 0.00%
Long file (Parser) 864.4±46.79ns 843.1±27.93ns +2.53%
Mini js (Execution) 668.1±36.11µs 668.1±29.75µs 0.00%
Mini js (Full) 1031.0±82.02µs 1014.7±35.62µs +1.61%
Mini js (Parser) 41.4±2.47µs 40.5±1.46µs +2.22%
Number Object Access (Execution) 4.8±0.23µs 4.8±0.32µs 0.00%
Number Object Access (Full) 344.0±17.40µs 334.4±10.51µs +2.87%
Object Creation (Execution) 5.4±0.26µs 5.2±0.16µs +3.85%
Object Creation (Full) 348.5±18.95µs 348.4±18.31µs +0.03%
RegExp (Execution) 13.0±0.89µs 12.5±0.52µs +4.00%
RegExp (Full) 359.5±10.68µs 353.6±11.56µs +1.67%
RegExp Literal (Execution) 12.8±0.68µs 12.8±1.11µs 0.00%
RegExp Literal (Full) 361.0±20.41µs 354.3±16.30µs +1.89%
RegExp Literal Creation (Execution) 11.2±0.57µs 11.2±0.58µs 0.00%
RegExp Literal Creation (Full) 351.1±17.08µs 350.1±19.06µs +0.29%
Static Object Property Access (Execution) 5.5±0.22µs 5.5±0.28µs 0.00%
Static Object Property Access (Full) 346.7±19.33µs 346.0±20.51µs +0.20%
String Object Access (Execution) 8.5±0.44µs 8.5±0.54µs 0.00%
String Object Access (Full) 357.9±25.02µs 348.8±29.89µs +2.61%
String comparison (Execution) 7.6±0.36µs 7.7±0.36µs -1.30%
String comparison (Full) 352.5±24.18µs 345.3±16.76µs +2.09%
String concatenation (Execution) 6.2±0.29µs 6.2±0.30µs 0.00%
String concatenation (Full) 340.0±22.98µs 347.9±34.05µs -2.27%
String copy (Execution) 4.7±0.19µs 4.9±0.66µs -4.08%
String copy (Full) 334.6±16.10µs 329.7±19.72µs +1.49%
Symbols (Execution) 4.0±0.28µs 4.0±0.29µs 0.00%
Symbols (Full) 326.8±13.26µs 322.1±20.82µs +1.46%

@Razican Razican requested review from HalidOdat and RageKnify May 25, 2021 14:07
@Razican Razican added this to the v0.12.0 milestone May 25, 2021
Copy link
Contributor

@RageKnify RageKnify left a comment

Choose a reason for hiding this comment

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

If master is merged into this branch we should see the panic numbers go down, right?

@Razican
Copy link
Member

Razican commented May 26, 2021

If master is merged into this branch we should see the panic numbers go down, right?

I think this is the panic that happens only "sometimes".

@0x7D2B
Copy link
Contributor Author

0x7D2B commented May 26, 2021

There's something non-deterministic, there was a panic that disappeared after I made a commit that only added comments. With #1280 it should fix both of the issues causing panics that I came across.

@0x7D2B
Copy link
Contributor Author

0x7D2B commented May 26, 2021

Let's see what happens to the tests.

@0x7D2B
Copy link
Contributor Author

0x7D2B commented May 26, 2021

Weird. I was getting a panic in regress before this.

@github-actions
Copy link

Benchmark for 96c7491

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 353.0±10.41ns 359.3±4.10ns -1.75%
Arithmetic operations (Full) 265.5±6.60µs 275.8±0.31µs -3.73%
Array access (Execution) 5.9±0.23µs 6.1±0.09µs -3.28%
Array access (Full) 284.2±9.84µs 297.8±1.68µs -4.57%
Array creation (Execution) 2.9±0.12ms 3.0±0.06ms -3.33%
Array creation (Full) 3.2±0.11ms 3.5±0.13ms -8.57%
Array pop (Execution) 934.4±28.56µs 964.8±19.18µs -3.15%
Array pop (Full) 1414.4±46.33µs 1367.1±55.01µs +3.46%
Boolean Object Access (Execution) 4.9±0.19µs 4.9±0.18µs 0.00%
Boolean Object Access (Full) 290.7±1.08µs 290.1±8.10µs +0.21%
Clean js (Execution) 614.5±25.06µs 662.7±7.02µs -7.27%
Clean js (Full) 979.5±13.67µs 921.5±37.40µs +6.29%
Clean js (Parser) 40.3±0.91µs 40.6±0.74µs -0.74%
Create Realm 446.7±10.93ns 415.8±12.01ns +7.43%
Dynamic Object Property Access (Execution) 4.9±0.11µs 5.1±0.07µs -3.92%
Dynamic Object Property Access (Full) 287.2±5.96µs 295.7±4.75µs -2.87%
Expression (Parser) 7.3±0.06µs 7.0±0.29µs +4.29%
Fibonacci (Execution) 711.6±23.77µs 752.5±1.90µs -5.44%
Fibonacci (Full) 1014.7±36.18µs 1003.8±41.47µs +1.09%
For loop (Execution) 21.9±0.14µs 22.0±0.15µs -0.45%
For loop (Full) 288.9±9.91µs 289.7±14.24µs -0.28%
For loop (Parser) 19.7±0.15µs 18.7±0.68µs +5.35%
Goal Symbols (Parser) 13.7±0.37µs 14.3±0.15µs -4.20%
Hello World (Parser) 4.0±0.07µs 3.9±0.13µs +2.56%
Long file (Parser) 773.4±12.04ns 755.7±28.50ns +2.34%
Mini js (Execution) 569.8±23.55µs 591.7±16.61µs -3.70%
Mini js (Full) 898.1±13.31µs 859.7±33.12µs +4.47%
Mini js (Parser) 35.9±0.51µs 36.0±0.06µs -0.28%
Number Object Access (Execution) 3.8±0.15µs 4.0±0.11µs -5.00%
Number Object Access (Full) 278.1±6.55µs 271.2±10.75µs +2.54%
Object Creation (Execution) 4.1±0.22µs 4.4±0.03µs -6.82%
Object Creation (Full) 279.9±4.65µs 285.2±7.65µs -1.86%
RegExp (Execution) 10.5±0.25µs 10.9±0.10µs -3.67%
RegExp (Full) 298.6±4.37µs 288.6±11.36µs +3.47%
RegExp Literal (Execution) 10.0±0.50µs 10.7±0.13µs -6.54%
RegExp Literal (Full) 294.6±6.24µs 303.4±0.50µs -2.90%
RegExp Literal Creation (Execution) 9.3±0.14µs 9.4±0.15µs -1.06%
RegExp Literal Creation (Full) 278.1±10.07µs 298.2±0.87µs -6.74%
Static Object Property Access (Execution) 4.6±0.07µs 4.6±0.05µs 0.00%
Static Object Property Access (Full) 277.8±8.76µs 283.1±6.21µs -1.87%
String Object Access (Execution) 6.5±0.27µs 7.1±0.09µs -8.45%
String Object Access (Full) 287.2±5.49µs 298.7±0.58µs -3.85%
String comparison (Execution) 6.1±0.32µs 6.5±0.15µs -6.15%
String comparison (Full) 283.5±6.73µs 294.7±0.46µs -3.80%
String concatenation (Execution) 4.9±0.19µs 5.1±0.08µs -3.92%
String concatenation (Full) 271.4±11.11µs 272.8±8.56µs -0.51%
String copy (Execution) 4.0±0.03µs 3.9±0.09µs +2.56%
String copy (Full) 273.2±8.84µs 279.1±7.97µs -2.11%
Symbols (Execution) 3.1±0.13µs 3.3±0.04µs -6.06%
Symbols (Full) 267.1±7.74µs 277.8±0.84µs -3.85%

@0x7D2B 0x7D2B merged commit d009fa2 into master May 27, 2021
@0x7D2B 0x7D2B deleted the fix/regex-last-index branch May 27, 2021 09:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working builtins PRs and Issues related to builtins/intrinsics execution Issues or PRs related to code execution rust Pull requests that update Rust code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Regular expression execution can panic
3 participants