fix(core): fix git url regex matching taking too long #3213
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
gitlab_re
that we build has an issue with catastropic backtracking.essentially, we matched a path like
/~something/owner/repo
and the part that matches~something
, the part that matchesowner
and the part that matchesrepo
were greedy matches for a variable number of path fragments separated by/
so there's a ton of valid match combinations which regex searches exhaustively.with this change, it only matches a single part with
~
in front,owner
matches a variable path likea/b/c/d
and repo only matches the last part. so the only variable-length thing isowner
(in the case of subgroups in gitlab). This makes it run fast again.I also added a test case that, with the old regex, takes 14 seconds and the duration check fails, with the new regex takes 2.3 seconds (for 14 tests) and passes.