-
Jakob Gruber authored
Since early regexp errors were implemented in crrev.com/a56874d3, the JS parser calls into the regexp parser to validate the regexp literal syntax. For these calls, the JS parser passes its Zone to the regexp parser. This means that scripts with multiple regexp literals are all parsed using the same Zone memory. Very large scripts with many (think hundreds of thousands) regexp literals may thus run out of memory whereas previously they would parse and run successfully. This CL fixes the OOMs by resetting the state of the JS parser Zone around regexp parser calls. We introduce a new ZoneScope class, similar to HandleScope, which controls the lifetime of zone objects allocated within its scope. In other words: { ZoneScope zone_scope(zone); // Store zone state S. // ... Allocate objects O in zone. // zone is now in state S'. } // zone_scope goes out of scope, reset zone to state S. Objects O // are freed and no longer usable. Fixed: chromium:1264014 Bug: v8:896 Change-Id: I3e7ac36f25a9d6c4eda2460bd1bea9814685e89b Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3256783Reviewed-by: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/main@{#77646}
30cab7b1