From: Damien Neil Date: Thu, 9 Feb 2023 22:41:42 +0000 (-0800) Subject: io: detect Writers that access io.Copy's buffer after returning X-Git-Tag: go1.21rc1~1579 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5c5f8dc94793316ebeab24fc3e6cd6340a95df91;p=gostls13.git 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 Run-TryBot: Damien Neil TryBot-Result: Gopher Robot Auto-Submit: Damien Neil --- 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 {