Request lines were encoded with `json.Marshal`, which writes `&`, `<` and `>` as `\u0026`, `\u003c` and `\u003e`. A query string or referer then did not read as the visitor sent it, and `grep` for it found nothing. Request lines now hold the three characters as sent, and stay valid JSON: they are written by a `json.Encoder` with HTML escaping off. Model: opus-5-5
This commit is contained in:
1 parent
b89c53c640
commit
07f68292d1
2 files changed
+48
-3
No files matched your search
@@ -67,6 +67,44 @@ func TestWriteWritesOneJSONLineMarkedRequest(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRequestLinesHoldTheQueryAndRefererAsSent(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var out bytes.Buffer
|
||||
|
||||
err := requestlog.Write(&out, &requestlog.Line{
|
||||
Query: "a=1&b=<2>",
|
||||
Referer: "https://example.com/?x=1&y=<2>",
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("write: %v", err)
|
||||
}
|
||||
|
||||
err = requestlog.WriteRProxyLine(&out, &requestlog.RProxyLine{Query: "a=1&b=<2>"})
|
||||
if err != nil {
|
||||
t.Fatalf("write the rproxy line: %v", err)
|
||||
}
|
||||
|
||||
lines := strings.Split(strings.TrimSuffix(out.String(), "\n"), "\n")
|
||||
if len(lines) != 2 {
|
||||
t.Fatalf("wrote %q, want two lines", out.String())
|
||||
}
|
||||
|
||||
for _, line := range lines {
|
||||
if !json.Valid([]byte(line)) {
|
||||
t.Errorf("%s is not valid JSON", line)
|
||||
}
|
||||
|
||||
if !strings.Contains(line, `"query":"a=1&b=<2>"`) {
|
||||
t.Errorf("%s does not hold the query as sent", line)
|
||||
}
|
||||
}
|
||||
|
||||
if !strings.Contains(lines[0], `"referer":"https://example.com/?x=1&y=<2>"`) {
|
||||
t.Errorf("%s does not hold the referer as sent", lines[0])
|
||||
}
|
||||
}
|
||||
|
||||
func TestWriteRProxyLineWritesOneJSONLineWithOnlyItsFields(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
Reference in new issue
Block a user