mirror of
https://github.com/golang/go
synced 2024-11-18 08:54:45 -07:00
net/textproto: properly trim continued lines in MIME headers
A MIME header can include values defined on several lines. Only the first line of each value was trimmed. Make sure all the lines are trimmed before being aggregated. Fixes #11204 Change-Id: Id92f384044bc6c4ca836e5dba2081fe82c82dc85 Reviewed-on: https://go-review.googlesource.com/15683 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
c478c48597
commit
6f772787f9
@ -150,7 +150,7 @@ func (r *Reader) readContinuedLineSlice() ([]byte, error) {
|
||||
break
|
||||
}
|
||||
r.buf = append(r.buf, ' ')
|
||||
r.buf = append(r.buf, line...)
|
||||
r.buf = append(r.buf, trim(line)...)
|
||||
}
|
||||
return r.buf, nil
|
||||
}
|
||||
|
@ -205,6 +205,32 @@ func TestReadMIMEHeaderNonCompliant(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// Test that continued lines are properly trimmed. Issue 11204.
|
||||
func TestReadMIMEHeaderTrimContinued(t *testing.T) {
|
||||
// In this header, \n and \r\n terminated lines are mixed on purpose.
|
||||
// We expect each line to be trimmed (prefix and suffix) before being concatenated.
|
||||
// Keep the spaces as they are.
|
||||
r := reader("" + // for code formatting purpose.
|
||||
"a:\n" +
|
||||
" 0 \r\n" +
|
||||
"b:1 \t\r\n" +
|
||||
"c: 2\r\n" +
|
||||
" 3\t\n" +
|
||||
" \t 4 \r\n\n")
|
||||
m, err := r.ReadMIMEHeader()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
want := MIMEHeader{
|
||||
"A": {"0"},
|
||||
"B": {"1"},
|
||||
"C": {"2 3 4"},
|
||||
}
|
||||
if !reflect.DeepEqual(m, want) {
|
||||
t.Fatalf("ReadMIMEHeader mismatch.\n got: %q\nwant: %q", m, want)
|
||||
}
|
||||
}
|
||||
|
||||
type readResponseTest struct {
|
||||
in string
|
||||
inCode int
|
||||
|
Loading…
Reference in New Issue
Block a user