aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Erik Dubbelboer <erik@dubbelboer.com> 2019-11-13 13:37:11 +0100
committerGravatar Erik Dubbelboer <erik@dubbelboer.com> 2019-11-13 13:37:11 +0100
commitdce066cf1c95d8017f1b33c6c52d53f3ec6fba54 (patch)
tree233dbbf6d41bdc9ab0dc3786733887fe1290a5dd
parentFix Peeks and Buffered (diff)
downloadfasthttp-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.go16
1 files changed, 12 insertions, 4 deletions
diff --git a/header.go b/header.go
index 4119b0f..591f9d1 100644
--- a/header.go
+++ b/header.go
@@ -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 {