fix: use errors='replace' in Frame.__str__() for partial UTF-8 frames (fixes #1695)#1704
Open
naarob wants to merge 1 commit intopython-websockets:mainfrom
Open
fix: use errors='replace' in Frame.__str__() for partial UTF-8 frames (fixes #1695)#1704naarob wants to merge 1 commit intopython-websockets:mainfrom
naarob wants to merge 1 commit intopython-websockets:mainfrom
Conversation
…python-websockets#1695) Frame.__str__() decoded OP_TEXT frame data with a bare .decode(), which raises UnicodeDecodeError when the frame ends in the middle of a multi-byte UTF-8 sequence. This happens when the websockets library itself fragments a large text message at byte boundaries (not at character boundaries) for continuations frames (fin=False), e.g. Japanese, Chinese, or emoji text. When DEBUG logging is enabled, the UnicodeDecodeError propagated and caused the connection to close with code 1007 (INVALID_DATA), even though the message was valid. The data itself was fine — only the logging was broken. Fix: add errors='replace' to the .decode() call in Frame.__str__(). This replaces incomplete sequences with U+FFFD (replacement character), making the log entry human-readable while never crashing the connection. Tests: 9 new tests covering partial Japanese, partial emoji, complete frames, ASCII, binary, and ping frames. 79 upstream tests unchanged.
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.
Fixes UnicodeDecodeError when DEBUG logging is enabled and a large text message is fragmented at byte boundaries. See issue #1695 for full details.
data = repr(bytes(self.data).decode(errors="replace"))9 new tests. 79 upstream pass. 0 regressions.