diff options
author | Erik Dubbelboer <erik@dubbelboer.com> | 2019-11-13 13:37:11 +0100 |
---|---|---|
committer | Erik Dubbelboer <erik@dubbelboer.com> | 2019-11-13 13:37:11 +0100 |
commit | dce066cf1c95d8017f1b33c6c52d53f3ec6fba54 (patch) | |
tree | 233dbbf6d41bdc9ab0dc3786733887fe1290a5dd | |
parent | Fix Peeks and Buffered (diff) | |
download | fasthttp-find-header-corruption.tar.gz fasthttp-find-header-corruption.tar.bz2 fasthttp-find-header-corruption.zip |
Put EvenRawerHeadersCopy backfind-header-corruption
-rw-r--r-- | header.go | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -77,9 +77,10 @@ type RequestHeader struct { // wire. rawHeadersCopy []byte - NeededMore int - Peeks []int - Buffered []int + NeededMore int + Peeks []int + Buffered []int + EvenRawerHeadersCopy []byte } // SetContentRange sets 'Content-Range: bytes startPos-endPos/contentLength' @@ -735,6 +736,7 @@ func (h *RequestHeader) CopyTo(dst *RequestHeader) { dst.NeededMore = h.NeededMore dst.Peeks = append(dst.Peeks[:0], h.Peeks...) dst.Buffered = append(dst.Buffered[:0], h.Buffered...) + dst.EvenRawerHeadersCopy = append(dst.EvenRawerHeadersCopy[:0], h.EvenRawerHeadersCopy...) } // VisitAll calls f for each header. @@ -1392,8 +1394,14 @@ func (h *RequestHeader) tryRead(r *bufio.Reader, n int) error { h.resetSkipNormalize() b, err := r.Peek(n) + buffered := r.Buffered() h.Peeks = append(h.Peeks, n) - h.Buffered = append(h.Buffered, r.Buffered()) + h.Buffered = append(h.Buffered, buffered) + if c := cap(h.EvenRawerHeadersCopy); c < buffered { + h.EvenRawerHeadersCopy = make([]byte, buffered) + } + peeked, _ := r.Peek(buffered) + h.EvenRawerHeadersCopy = append(h.EvenRawerHeadersCopy[:0], peeked...) if len(b) == 0 { if err == io.EOF { |