code: func (d *decompressor) readMember() error {
  	// Set the decompressor to Read from the underlying flate.Reader
  	// and mark the starting offset from which the underlying reader
  	// was used.
  	d.buf.reset()
  	mark := d.cr.offset()
  
  	err := d.gz.Reset(d)
  	if err != nil {
  		d.blockSize = -1
  		return err
  	}
  
  	d.blockSize = expectedMemberSize(d.gz.Header)
  	if d.blockSize < 0 {
  		return ErrNoBlockSize
  	}
  	skipped := int(d.cr.offset() - mark)
  	need := d.blockSize - skipped
  	if need == 0 {
  		return io.EOF
  	} else if need < 0 {
  		return ErrCorrupt
  	}
  
  	// Read compressed data into the decompressor buffer until the
  	// underlying flate.Reader is positioned at the end of the gzip
  	// member in which the readMember call was made.
  	return d.buf.readLimited(need, d.cr)
  }
docs: // readMember buffers the gzip member starting the current decompressor offset.