From 5c5f8dc94793316ebeab24fc3e6cd6340a95df91 Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Thu, 9 Feb 2023 14:41:42 -0800 Subject: [PATCH] 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 --- src/io/io.go | 9 +++++++++ 1 file changed, 9 insertions(+) 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 { -- 2.50.0