|  | @@ -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
 | 
	
		
			
				|  |  |  			})
 |