[Blueprints] Prevent WSOD when autologin is enabled and a plugin logs a notice - #2079
Merged
Merged
Conversation
… a notice
This PR ensures the autologin step won't cause a perpetual white screen
of death when one of the plugins displays a notice.
The autologin flow consists of a bunch of checks, setcookie() call, a
header('Location') call, and an `exit;`. However, when the headers are
already sent, the cookies won't be set, the redirect won't work, but
the script will still. This, effectively, prevents loading any WordPress
page.
This PR adds a `headers_sent()` check to stop the autologin step early
in those scenarios when we can't finish the login.
## Testing instructions
* CI has a new E2E test – confirm everything is green
* Try this Blueprint. It should open a white screen with errors. Now
change the landing page to "/". It should open the homepage with a few
errors at the top. Before this PR, you'd see a blank page instead of
the homepage.
```json
{
"plugins": [
"pronamic-ideal"
],
"preferredVersions": {
"php": "8.2",
"wp": "6.7"
},
"features": {
"networking": true
},
"login": true,
"landingPage": "/wp-admin/update-core.php",
"steps": [
{
"step": "defineWpConfigConsts",
"consts": {
"WP_DEBUG": true,
"WP_DEBUG_DISPLAY": true
}
},
{
"step": "setSiteLanguage",
"language": "nl_NL"
}
]
}
```
bgrgicak
approved these changes
Dec 16, 2024
bgrgicak
left a comment
Collaborator
There was a problem hiding this comment.
Thanks for the fix!
I observed this last week in a few plugins while running the top 1000 plugin compatibility tests.
Collaborator
Author
|
Thanks for the review! It seems like an important test for this is still failing, though. Let's fix it before merging. |
Collaborator
|
I reran the test and it works, I also tried it locally and it passed. |
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 PR ensures the autologin step won't cause a perpetual white screen of death when one of the plugins displays a notice.
The autologin flow consists of a bunch of checks, setcookie() call, a header('Location') call, and an
exit;. However, when the headers are already sent, the cookies won't be set, the redirect won't work, but the script will still. This, effectively, prevents loading any WordPress page.This PR adds a
headers_sent()check to stop the autologin step early in those scenarios when we can't finish the login.Testing instructions
{ "plugins": [ "pronamic-ideal" ], "preferredVersions": { "php": "8.2", "wp": "6.7" }, "features": { "networking": true }, "login": true, "landingPage": "/wp-admin/update-core.php", "steps": [ { "step": "defineWpConfigConsts", "consts": { "WP_DEBUG": true, "WP_DEBUG_DISPLAY": true } }, { "step": "setSiteLanguage", "language": "nl_NL" } ] }