diff options
| author | Damien Neil <dneil@google.com> | 2023-02-09 14:41:42 -0800 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2023-02-10 22:09:24 +0000 |
| commit | 5c5f8dc94793316ebeab24fc3e6cd6340a95df91 (patch) | |
| tree | bd93b028b0ac5d83fa1e21e35a2cebb9bd17c24b /src/io | |
| parent | 8491fd311c5d4f38fda026129709306ab4787e87 (diff) | |
| download | go-5c5f8dc94793316ebeab24fc3e6cd6340a95df91.tar.xz | |
io: detect Writers that access io.Copy's buffer after returning
When the race detector is enabled, scribble over copy buffers with
garbage after Write returns.
For #58452
Change-Id: I25547684bcbef7d302d76736cb02e59c89a640ee
Reviewed-on: https://go-review.googlesource.com/c/go/+/466865
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Damien Neil <dneil@google.com>
Diffstat (limited to 'src/io')
| -rw-r--r-- | src/io/io.go | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/io/io.go b/src/io/io.go index 630ab73b56..946ea5b01c 100644 --- a/src/io/io.go +++ b/src/io/io.go @@ -14,6 +14,7 @@ package io import ( "errors" + "internal/race" "sync" ) @@ -427,6 +428,14 @@ func copyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error) { nr, er := src.Read(buf) if nr > 0 { nw, ew := dst.Write(buf[0:nr]) + if race.Enabled { + // Write over the buffer to help the race detector + // detect Write calls that access the buffer after returning. + // Use something other than zeros to make errors more obvious. + for i := range buf[:nr] { + buf[i] = 0xdd + } + } if nw < 0 || nr < nw { nw = 0 if ew == nil { |
