From: Alexander Yastrebov Date: Wed, 27 Sep 2023 02:01:46 +0000 (+0000) Subject: internal/zstd: allow empty compressed blocks X-Git-Tag: go1.22rc1~742 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1a51b59c119034dfbcd98063bf775d92e6f76db4;p=gostls13.git internal/zstd: allow empty compressed blocks For #62513 Change-Id: I295e72f71165665b8ea999e68a5586fa785b546d GitHub-Last-Rev: 902e952d88dba505f87393fd3c97c433ae291709 GitHub-Pull-Request: golang/go#63252 Reviewed-on: https://go-review.googlesource.com/c/go/+/531217 Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Bryan Mills Reviewed-by: Ian Lance Taylor --- diff --git a/src/internal/zstd/block.go b/src/internal/zstd/block.go index cf4c954c7d..8732661fa1 100644 --- a/src/internal/zstd/block.go +++ b/src/internal/zstd/block.go @@ -50,10 +50,9 @@ func (r *Reader) compressedBlock(blockSize int) error { if off < len(data) { return r.makeError(off, "extraneous data after no sequences") } - if len(litbuf) == 0 { - return r.makeError(off, "no sequences and no literals") - } + r.buffer = append(r.buffer, litbuf...) + return nil } @@ -374,9 +373,7 @@ func (r *Reader) execSeqs(data block, off int, litbuf []byte, seqCount int) erro } } - if len(litbuf) > 0 { - r.buffer = append(r.buffer, litbuf...) - } + r.buffer = append(r.buffer, litbuf...) if rbr.cnt != 0 { return r.makeError(off, "extraneous data after sequences") diff --git a/src/internal/zstd/zstd_test.go b/src/internal/zstd/zstd_test.go index 22af814acf..c2914bb1f4 100644 --- a/src/internal/zstd/zstd_test.go +++ b/src/internal/zstd/zstd_test.go @@ -90,6 +90,11 @@ var tests = []struct { "0\x00\x00\x00\x00\x000\x00\x00\x00\x00\x001\x00\x00\x00\x00\x000000", "(\xb5/\xfd\x04X\x8d\x00\x00P0\x000\x001\x000000\x03T\x02\x00\x01\x01m\xf9\xb7G", }, + { + "empty block", + "", + "\x28\xb5\x2f\xfd\x00\x00\x15\x00\x00\x00\x00", + }, } func TestSamples(t *testing.T) {