Browse Source

limit max http header length

Darien Raymond 8 năm trước cách đây
mục cha
commit
68164d46f9
1 tập tin đã thay đổi với 6 bổ sung2 xóa
  1. 6 2
      transport/internet/headers/http/http.go

+ 6 - 2
transport/internet/headers/http/http.go

@@ -16,6 +16,8 @@ import (
 const (
 	CRLF   = "\r\n"
 	ENDING = CRLF + CRLF
+
+	maxHeaderLength = 8192
 )
 
 var (
@@ -47,7 +49,8 @@ type HeaderReader struct {
 
 func (*HeaderReader) Read(reader io.Reader) (*buf.Buffer, error) {
 	buffer := buf.NewSmall()
-	for {
+	totalBytes := 0
+	for totalBytes < maxHeaderLength {
 		err := buffer.AppendSupplier(buf.ReadFrom(reader))
 		if err != nil {
 			return nil, err
@@ -57,7 +60,8 @@ func (*HeaderReader) Read(reader io.Reader) (*buf.Buffer, error) {
 			break
 		}
 		if buffer.Len() >= len(ENDING) {
-			leftover := buffer.BytesFrom(buffer.Len() - len(ENDING))
+			totalBytes += buffer.Len() - len(ENDING)
+			leftover := buffer.BytesFrom(-len(ENDING))
 			buffer.Reset(func(b []byte) (int, error) {
 				return copy(b, leftover), nil
 			})