func (d *decodeReader) processFilters() (err error) {
	f := d.filters[0]
	if f.offset > 0 {
		return nil
	}
	d.filters = d.filters[1:]
	if d.win.buffered() < f.length {
		// fill() didn't return enough bytes
		err = d.readErr()
		if err == nil || err == io.EOF {
			return errInvalidFilter
		}
		return err
	}

	if cap(d.buf) < f.length {
		d.buf = make([]byte, f.length)
	}
	d.outbuf = d.buf[:f.length]
	n := d.win.read(d.outbuf)
	for {
		// run filter passing buffer and total bytes read so far
		d.outbuf, err = f.filter(d.outbuf, d.tot)
		if err != nil {
			return err
		}
		if cap(d.outbuf) > cap(d.buf) {
			// Filter returned a bigger buffer, save it for future filters.
			d.buf = d.outbuf
		}
		if len(d.filters) == 0 {
			return nil
		}
		f = d.filters[0]

		if f.offset != 0 {
			// next filter not at current offset
			f.offset -= n
			return nil
		}
		if f.length != len(d.outbuf) {
			return errInvalidFilter
		}
		d.filters = d.filters[1:]

		if cap(d.outbuf) < cap(d.buf) {
			// Filter returned a smaller buffer. Copy it back to the saved buffer
			// so the next filter can make use of the larger buffer if needed.
			d.outbuf = append(d.buf[:0], d.outbuf...)
		}
	}
}
func (d *decodeReader) processFilters() (err error) {
	f := d.filters[0]
	if f.offset > 0 {
		return nil
	}
	d.filters = d.filters[1:]
	if d.win.buffered() < f.length {
		
		err = d.readErr()
		if err == nil || err == io.EOF {
			return errInvalidFilter
		}
		return err
	}

	if cap(d.buf) < f.length {
		d.buf = make([]byte, f.length)
	}
	d.outbuf = d.buf[:f.length]
	n := d.win.read(d.outbuf)
	for {
		
		d.outbuf, err = f.filter(d.outbuf, d.tot)
		if err != nil {
			return err
		}
		if cap(d.outbuf) > cap(d.buf) {
			
			d.buf = d.outbuf
		}
		if len(d.filters) == 0 {
			return nil
		}
		f = d.filters[0]

		if f.offset != 0 {
			
			f.offset -= n
			return nil
		}
		if f.length != len(d.outbuf) {
			return errInvalidFilter
		}
		d.filters = d.filters[1:]

		if cap(d.outbuf) < cap(d.buf) {
			
			
			d.outbuf = append(d.buf[:0], d.outbuf...)
		}
	}
}
func ( d * decodeReader ) processFilters ( ) ( err error ) { f := d . filters [ 0 ] if f . offset > 0 { return nil } d . filters = d . filters [ 1 : ] if d . win . buffered ( ) < f . length { // fill() didn't return enough bytes err = d . readErr ( ) if err == nil || err == io . EOF { return errInvalidFilter } return err } if cap ( d . buf ) < f . length { d . buf = make ( [ ] byte , f . length ) } d . outbuf = d . buf [ : f . length ] n := d . win . read ( d . outbuf ) for { // run filter passing buffer and total bytes read so far d . outbuf , err = f . filter ( d . outbuf , d . tot ) if err != nil { return err } if cap ( d . outbuf ) > cap ( d . buf ) { // Filter returned a bigger buffer, save it for future filters. d . buf = d . outbuf } if len ( d . filters ) == 0 { return nil } f = d . filters [ 0 ] if f . offset != 0 { // next filter not at current offset f . offset -= n return nil } if f . length != len ( d . outbuf ) { return errInvalidFilter } d . filters = d . filters [ 1 : ] if cap ( d . outbuf ) < cap ( d . buf ) { // Filter returned a smaller buffer. Copy it back to the saved buffer // so the next filter can make use of the larger buffer if needed. d . outbuf = append ( d . buf [ : 0 ] , d . outbuf ... ) } } }
// processFilters processes any filters valid at the current read index
// and stores the output in outbuf.
processFilters processes any filters valid at the current read index and stores the output in outbuf .