[5.4] ConvertEmptyStringsToNull middleware breaks confirmation validator with blank values #17708
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.
Description:
The
ConvertEmptyStringsToNull
middleware replaces blank strings in the input withnull
, which breaks the validation when comparing the input with the confirmation value.Steps To Reproduce:
Create a test case with the following in a new Laravel project:
The
testBlankPasswordWithBlankConfirmationValidates
test fails:Solution:
In my case, I just removed the
ConvertEmptyStringsToNull
middleware since that's not what I want to happen anyway. However, since that middleware is enabled on the default install, it should probably work out of the box. The reason for failure is in theValidatesAttributes
class:$other
and$value
are both null in this case, but theisset($other)
returns false causing the validation to fail regardless. My first thought is to just remove theisset
check:However, I'm not sure why that
isset
check was in there in the first place or what effect changing it will have on any other use cases. I've attached a PR in case that's the direction you want to go, but I think no matter what this is giving unexpected results since the middleware is mangling the input values in the first place. It looks like maybe theisset
check is just a carry-over from very early on to avoid undefined array access warnings possibly. Here is an excerpt from what looks like the original version back on 1/10/13: