]> Cypherpunks repositories - gostls13.git/commitdiff
net/textproto: skip zero-length keys
authorJeff R. Allen <jra@nella.org>
Thu, 18 Jun 2015 12:28:54 +0000 (14:28 +0200)
committerBrad Fitzpatrick <bradfitz@golang.org>
Mon, 22 Jun 2015 02:48:27 +0000 (02:48 +0000)
A header of ": value" results in an empty key. Do not add
it to the headers, because RFC7230 (section 3.2) says that
field-names are tokens, which are one or more characters.

Fixes #11205.

Change-Id: I883be89da1489dc84f98523786b019d1d0169d46
Reviewed-on: https://go-review.googlesource.com/11242
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/net/textproto/reader.go
src/net/textproto/reader_test.go

index 09b3352eddfde46857ff789ced550cef0803b694..e4b8f6bb9125c58d4bf25e18bdea8c77c0c1701d 100644 (file)
@@ -485,6 +485,13 @@ func (r *Reader) ReadMIMEHeader() (MIMEHeader, error) {
                }
                key := canonicalMIMEHeaderKey(kv[:endKey])
 
+               // As per RFC 7230 field-name is a token, tokens consist of one or more chars.
+               // We could return a ProtocolError here, but better to be liberal in what we
+               // accept, so if we get an empty key, skip it.
+               if key == "" {
+                       continue
+               }
+
                // Skip initial spaces in value.
                i++ // skip colon
                for i < len(kv) && (kv[i] == ' ' || kv[i] == '\t') {
index cbc0ed183eb8eefe307d66720fb9c922e3859fd6..6bbd993b8c5bd3c9ae2491b14256fe80157c85e2 100644 (file)
@@ -153,6 +153,15 @@ func TestReadMIMEHeaderSingle(t *testing.T) {
        }
 }
 
+func TestReadMIMEHeaderNoKey(t *testing.T) {
+       r := reader(": bar\ntest-1: 1\n\n")
+       m, err := r.ReadMIMEHeader()
+       want := MIMEHeader{"Test-1": {"1"}}
+       if !reflect.DeepEqual(m, want) || err != nil {
+               t.Fatalf("ReadMIMEHeader: %v, %v; want %v", m, err, want)
+       }
+}
+
 func TestLargeReadMIMEHeader(t *testing.T) {
        data := make([]byte, 16*1024)
        for i := 0; i < len(data); i++ {