From 7748c4922e426798ebb878eb48ba0d2d0dc0db09 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sat, 27 Apr 2024 10:03:59 +0200 Subject: 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(-) (limited to 'compileopts') diff --git a/compileopts/config.go b/compileopts/config.go index 98dd30738..ab6de4e44 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 -- cgit v1.2.3