github.com/crewjam/saml@v0.4.14/flate.go (about)

     1  package saml
     2  
     3  import (
     4  	"compress/flate"
     5  	"fmt"
     6  	"io"
     7  )
     8  
     9  const flateUncompressLimit = 10 * 1024 * 1024 // 10MB
    10  
    11  func newSaferFlateReader(r io.Reader) io.ReadCloser {
    12  	return &saferFlateReader{r: flate.NewReader(r)}
    13  }
    14  
    15  type saferFlateReader struct {
    16  	r     io.ReadCloser
    17  	count int
    18  }
    19  
    20  func (r *saferFlateReader) Read(p []byte) (n int, err error) {
    21  	if r.count+len(p) > flateUncompressLimit {
    22  		return 0, fmt.Errorf("flate: uncompress limit exceeded (%d bytes)", flateUncompressLimit)
    23  	}
    24  	n, err = r.r.Read(p)
    25  	r.count += n
    26  	return n, err
    27  }
    28  
    29  func (r *saferFlateReader) Close() error {
    30  	return r.r.Close()
    31  }