4 "github.com/mjl-/flate"
7// FlateWriter wraps a flate.Writer and ensures no Write/Flush/Close calls are made
8// again on the underlying flate writer when a panic came out of the flate writer
9// (e.g. raised by the destination writer of the flate writer). After a panic
10// "through" a flate.Writer, its state is inconsistent and further calls could
11// panic with out of bounds slice accesses.
12type FlateWriter struct {
17func NewFlateWriter(w *flate.Writer) *FlateWriter {
18 return &FlateWriter{w, nil}
21func (w *FlateWriter) checkBroken() func() {
35func (w *FlateWriter) Write(data []byte) (int, error) {
36 defer w.checkBroken()()
37 return w.w.Write(data)
40func (w *FlateWriter) Flush() error {
41 defer w.checkBroken()()
45func (w *FlateWriter) Close() error {
46 defer w.checkBroken()()