mirror of
https://github.com/golang/go
synced 2024-09-30 13:28:38 -06:00
compress/flate: make compression level 0 consistent
Tests for determinism was not working as intended since io.Copybuffer uses the io.WriterTo if available. This exposed that level 0 (no compression) changed output based on the number of writes and buffers given to the writer. Previously, Write would emit a new raw block (BTYPE=00) for every non-empty call to Write. This CL fixes it such that a raw block is only emitted upon the following conditions: * A full window is obtained (every 65535 bytes) * Flush is called * Close is called Change-Id: I807f866d97e2db7820f11febab30a96266a6cbf1 Reviewed-on: https://go-review.googlesource.com/31174 Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
This commit is contained in:
parent
2e196b15b9
commit
461adfd817
@ -521,10 +521,10 @@ func (d *compressor) fillStore(b []byte) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *compressor) store() {
|
func (d *compressor) store() {
|
||||||
if d.windowEnd > 0 {
|
if d.windowEnd > 0 && (d.windowEnd == maxStoreBlockSize || d.sync) {
|
||||||
d.err = d.writeStoredBlock(d.window[:d.windowEnd])
|
d.err = d.writeStoredBlock(d.window[:d.windowEnd])
|
||||||
|
d.windowEnd = 0
|
||||||
}
|
}
|
||||||
d.windowEnd = 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// storeHuff compresses and stores the currently added data
|
// storeHuff compresses and stores the currently added data
|
||||||
|
@ -75,7 +75,7 @@ func TestWriteError(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("NewWriter: level %d: %v", l, err)
|
t.Fatalf("NewWriter: level %d: %v", l, err)
|
||||||
}
|
}
|
||||||
n, err := io.CopyBuffer(w, bytes.NewBuffer(in), copyBuffer)
|
n, err := io.CopyBuffer(w, struct{ io.Reader }{bytes.NewBuffer(in)}, copyBuffer)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatalf("Level %d: Expected an error, writer was %#v", l, ew)
|
t.Fatalf("Level %d: Expected an error, writer was %#v", l, ew)
|
||||||
}
|
}
|
||||||
@ -142,7 +142,7 @@ func testDeterministic(i int, t *testing.T) {
|
|||||||
}
|
}
|
||||||
// Use a very small prime sized buffer.
|
// Use a very small prime sized buffer.
|
||||||
cbuf := make([]byte, 787)
|
cbuf := make([]byte, 787)
|
||||||
_, err = io.CopyBuffer(w, br, cbuf)
|
_, err = io.CopyBuffer(w, struct{ io.Reader }{br}, cbuf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -157,7 +157,7 @@ func testDeterministic(i int, t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
_, err = io.CopyBuffer(w2, br2, cbuf)
|
_, err = io.CopyBuffer(w2, struct{ io.Reader }{br2}, cbuf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user