Fix/quadratic backtracking in email scan - #91
Open
moussetf wants to merge 5 commits into
Open
Conversation
added 4 commits
August 25, 2026 14:45
This change limits the length of the local part in the email regex to 64 characters (the maximum allowed). This solves the problem that `email_regex.findall(string)` takes time that grows quadratically with the length of the string.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This change improves the asymptotic performance when parsing an e-mail with a very long
Receive:header from quadratic to linear.The constant factor is still pretty large; for example, parsing a Receive header of 1MB still takes ~2.5s on my machine. OTH before this change, it would have taken multiple minutes.
This is achieved by modifying the regex used to parse e-mail addresses to impose a maximum length of 128 characters on the local part of the e-mail address (the part before the @-sign). Legal e-mail addresses should not have local parts with more than 64 characters.