Skip to content

Write a request snapshot to a byte stream - #9

Merged
noha merged 1 commit into
mainfrom
fix-snapshot-double-encoding
Sep 16, 2026
Merged

noha merged 1 commit into
mainfrom
fix-snapshot-double-encoding

Conversation

@noha

@noha noha commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

ZnMessage>>writeOn: writes bytes, but withStreamDo: opened the file with writeStream, a character stream with a UTF-8 encoder in front of it. Every byte above 127 was therefore encoded a second time: the C3 9F of an "ss" became C3 83 C2 9F, and a snapshot came out longer than the Content-Length it carried. A captured request from a German tenant read "FaaAYen" where the client had sent "Faassen", which is a good way to send someone looking for an encoding bug that is not there.

The stack trace branch wrote text to that same stream, so it now encodes the trace itself before handing it over.

The handler hard-codes /data/logs, so the test reaches it through a subclass that answers a directory of its own rather than opening up the production class.

ZnMessage>>writeOn: writes bytes, but withStreamDo: opened the file
with writeStream, a character stream with a UTF-8 encoder in front
of it. Every byte above 127 was therefore encoded a second time: the
C3 9F of an "ss" became C3 83 C2 9F, and a snapshot came out longer
than the Content-Length it carried. A captured request from a German
tenant read "FaaAYen" where the client had sent "Faassen", which is
a good way to send someone looking for an encoding bug that is not
there.

The stack trace branch wrote text to that same stream, so it now
encodes the trace itself before handing it over.

The handler hard-codes /data/logs, so the test reaches it through a
subclass that answers a directory of its own rather than opening up
the production class.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@noha
noha merged commit b83c092 into main Sep 16, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant