Commit 2ebdb5ec authored by Bryan C. Mills's avatar Bryan C. Mills

os: fix aliasing bug in RemoveAllTestHook restoration

The code to swap RemoveAllTestHook in and out in
TestRemoveAllWithMoreErrorThanReqSize was making a copy of the
RemoveAllTestHook pointer, then attempting to restore by loading from
the copy of that pointer. Since the two copies of the pointer aliased
the same address, the restore operation had no effect, and any
RemoveAll tests that happened to run after
TestRemoveAllWithMoreErrorThanReqSize would fail.

Fixes #31421

Change-Id: I7028475f5ceb3b0a2fa69d22af8d3379508c4531
Reviewed-on: https://go-review.googlesource.com/c/go/+/171777
Run-TryBot: Bryan C. Mills <bcmills@google.com>
Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 8d86ef22
...@@ -412,13 +412,14 @@ func TestRemoveAllWithMoreErrorThanReqSize(t *testing.T) { ...@@ -412,13 +412,14 @@ func TestRemoveAllWithMoreErrorThanReqSize(t *testing.T) {
if testing.Short() { if testing.Short() {
t.Skip("skipping in short mode") t.Skip("skipping in short mode")
} }
oldRemoveAllTestHook := RemoveAllTestHook
defer func(oldHook func(error) error) {
*RemoveAllTestHook = oldHook
}(*RemoveAllTestHook)
*RemoveAllTestHook = func(err error) error { *RemoveAllTestHook = func(err error) error {
return errors.New("error from RemoveAllTestHook") return errors.New("error from RemoveAllTestHook")
} }
defer func() {
*RemoveAllTestHook = *oldRemoveAllTestHook
}()
tmpDir, err := ioutil.TempDir("", "TestRemoveAll-") tmpDir, err := ioutil.TempDir("", "TestRemoveAll-")
if err != nil { if err != nil {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment