[9.x] Fix Str::Mask() for repeating chars #42295
Merged
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.
Currently
Str::mask()
does not correctly deal with repeating characters in the$string
argument.One such case is:
Str::mask('maan@email.com', '*', 2, 1)
which, before this PR would return the string:'m*an@email.com'
.The reason for this behaviour is because in Str::mask() L#498 a call to mb_strpos is made with
$segment
as$needle
, where$segment
would equal'a'
. This would return the numeric position of the first occurence, which would equal 1 setting$start
equal to the substring'm'
and$end
to'an@email.com'
.After this pull request the same test case results in the string
'ma*n@email.com'
while also passing all the original test cases.