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 }