]> Cypherpunks repositories - gostls13.git/commitdiff
internal/zstd: reset reader buffer
authorAlexander Yastrebov <yastrebov.alex@gmail.com>
Thu, 28 Sep 2023 22:26:57 +0000 (22:26 +0000)
committerGopher Robot <gobot@golang.org>
Fri, 29 Sep 2023 13:03:17 +0000 (13:03 +0000)
Reset r.buffer on Reset to avoid subsequent Read calls
observing previously decoded data.

For #62513

Change-Id: Icb65e76b5c5c0af32b36ec3a5999dca86407cbc8
GitHub-Last-Rev: 99c0a6fa72ad67cba5d29593fd3b28d14ddce4a4
GitHub-Pull-Request: golang/go#63288
Reviewed-on: https://go-review.googlesource.com/c/go/+/531735
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/internal/zstd/zstd.go
src/internal/zstd/zstd_test.go

index 72d733f6dd4f990ab28c0993923c0144d2a5e2cc..9cf62a6bacad2d43129ffb09209a81b51a97f3f1 100644 (file)
@@ -104,7 +104,7 @@ func (r *Reader) Reset(input io.Reader) {
        r.frameSizeUnknown = false
        r.remainingFrameSize = 0
        r.blockOffset = 0
-       // buffer
+       r.buffer = r.buffer[:0]
        r.off = 0
        // repeatedOffset1
        // repeatedOffset2
index 8c7f9403c1dff354c8215677d65555b384e7b81d..70141b02d055ace8ca53e6152bd40eb5f9bbdd43 100644 (file)
@@ -127,6 +127,26 @@ func TestSamples(t *testing.T) {
        }
 }
 
+func TestReset(t *testing.T) {
+       input := strings.NewReader("")
+       r := NewReader(input)
+       for _, test := range tests {
+               test := test
+               t.Run(test.name, func(t *testing.T) {
+                       input.Reset(test.compressed)
+                       r.Reset(input)
+                       got, err := io.ReadAll(r)
+                       if err != nil {
+                               t.Fatal(err)
+                       }
+                       gotstr := string(got)
+                       if gotstr != test.uncompressed {
+                               t.Errorf("got %q want %q", gotstr, test.uncompressed)
+                       }
+               })
+       }
+}
+
 var (
        bigDataOnce  sync.Once
        bigDataBytes []byte