From e62746e55b0f918dd1d52826930b9b03a0ebc97f Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sat, 27 Apr 2024 10:03:59 +0200 Subject: [PATCH] compileopts: fix race condition Appending to a slice can lead to a race condition if the capacity of the slice is larger than the length (and therefore the returned slice will overwrite some fields in the underlying array). This fixes that race condition. I don't know how severe this particular one is. It shouldn't be that severe, but it is a bug and it makes it easier to hunt for possibly more serious race conditions. --- compileopts/config.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compileopts/config.go b/compileopts/config.go index 98dd307387..ab6de4e44c 100644 --- a/compileopts/config.go +++ b/compileopts/config.go @@ -74,7 +74,8 @@ func (c *Config) GOARM() string { // BuildTags returns the complete list of build tags used during this build. func (c *Config) BuildTags() []string { - tags := append(c.Target.BuildTags, []string{ + tags := append([]string(nil), c.Target.BuildTags...) // copy slice (avoid a race) + tags = append(tags, []string{ "tinygo", // that's the compiler "purego", // to get various crypto packages to work "math_big_pure_go", // to get math/big to work