diff --git a/header.go b/header.go index f872ff123a..b914f4c267 100644 --- a/header.go +++ b/header.go @@ -2736,7 +2736,11 @@ func (h *RequestHeader) parseHeaders(buf []byte) (int, error) { continue } if caseInsensitiveCompare(s.key, strTrailer) { - err = h.SetTrailerBytes(s.value) + if nerr := h.SetTrailerBytes(s.value); nerr != nil { + if err == nil { + err = nerr + } + } continue } } diff --git a/http_test.go b/http_test.go index 9a6470b3f5..12821449bd 100644 --- a/http_test.go +++ b/http_test.go @@ -3,6 +3,7 @@ package fasthttp import ( "bufio" "bytes" + "encoding/base64" "fmt" "io" "io/ioutil" @@ -24,6 +25,11 @@ func TestInvalidTrailers(t *testing.T) { if err == io.EOF { t.Fatal(err) } + + b, _ := base64.StdEncoding.DecodeString("tCAKIDoKCToKICAKCToKICAKCToKIAogOgoJOgogIAoJOgovIC8vOi4KOh0KVFJhSUxlUjo9HT09HQpUUmFJTGVSOicQAApUUmFJTGVSOj0gHSAKCT09HQoKOgoKCgo=") + if err := (&Request{}).Read(bufio.NewReader(bytes.NewReader(b))); !strings.Contains(err.Error(), "error when reading request headers: invalid header key") { + t.Fatalf("%#v", err) + } } func TestResponseEmptyTransferEncoding(t *testing.T) {