Fix STDERR pollution corrupting exception serialization + silent exception swallowing#255
Merged
freekmurze merged 2 commits intomainfrom Feb 9, 2026
Conversation
…ception swallowing When PHP emits deprecation notices or warnings to STDERR during child task execution, the serialized exception data on the same stream gets corrupted, causing the parent to fall back to an empty ParallelError. Fix by using a unique delimiter marker so the parent can extract the serialized data regardless of preceding noise. Also fix a bug where exceptions were silently swallowed when catch handlers were registered but none matched the thrown exception type. Fixes #254 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.
Summary
ParallelError. Fixed by using a___SPATIE_ASYNC_CHILD___delimiter marker — the child prepends it before the serialized data, and the parent usesstrrpos()to extract only the data after it.catch()handlers are registered but none match the thrown exception type, the exception was silently swallowed. Now the exception is thrown if no handler matches.Test plan
trigger_error()warning then throws — verifies original exception type is preservedFixes #254
🤖 Generated with Claude Code