aboutsummaryrefslogtreecommitdiff
path: root/src/syscall/syscall_windows_test.go
diff options
context:
space:
mode:
authorqmuntal <quimmuntal@gmail.com>2024-10-16 16:18:45 +0200
committerQuim Muntal <quimmuntal@gmail.com>2024-10-18 04:09:36 +0000
commit6853d89477e0886c7c96b08e7efaf74abedfcf71 (patch)
treef25d731e65c81359dc51c1f6fd7b5afdaec6b68a /src/syscall/syscall_windows_test.go
parente45c125a3c343767b3bb68f3512d8cffbf7691b9 (diff)
downloadgo-6853d89477e0886c7c96b08e7efaf74abedfcf71.tar.xz
syscall: keep write access when O_TRUNC is used on Windows
CL 618836 introduces a regression where O_APPEND and O_TRUNC could not be used together on Windows. This CL fixes the issue by keeping the write access when O_TRUNC is used , which is required when overwriting data (as per the file access rights docs: https://learn.microsoft.com/en-us/windows/win32/fileio/file-access-rights-constants). Fixes #69902. Change-Id: I77ec60ca6929124dd4490bdad6c3280c4db3efcb Reviewed-on: https://go-review.googlesource.com/c/go/+/620575 Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Damien Neil <dneil@google.com>
Diffstat (limited to 'src/syscall/syscall_windows_test.go')
-rw-r--r--src/syscall/syscall_windows_test.go30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/syscall/syscall_windows_test.go b/src/syscall/syscall_windows_test.go
index ea1e8c9b3c..8b5af9c501 100644
--- a/src/syscall/syscall_windows_test.go
+++ b/src/syscall/syscall_windows_test.go
@@ -15,29 +15,39 @@ import (
"testing"
)
-func TestOpen_Dir(t *testing.T) {
+func TestOpen(t *testing.T) {
t.Parallel()
dir := t.TempDir()
+ file := filepath.Join(dir, "a")
+ f, err := os.Create(file)
+ if err != nil {
+ t.Fatal(err)
+ }
+ f.Close()
+
tests := []struct {
+ path string
flag int
err error
}{
- {syscall.O_RDONLY, nil},
- {syscall.O_CREAT, nil},
- {syscall.O_RDONLY | syscall.O_CREAT, nil},
- {syscall.O_RDONLY | syscall.O_TRUNC, syscall.ERROR_ACCESS_DENIED},
- {syscall.O_WRONLY | syscall.O_RDWR, syscall.EISDIR},
- {syscall.O_WRONLY, syscall.EISDIR},
- {syscall.O_RDWR, syscall.EISDIR},
+ {dir, syscall.O_RDONLY, nil},
+ {dir, syscall.O_CREAT, nil},
+ {dir, syscall.O_RDONLY | syscall.O_CREAT, nil},
+ {file, syscall.O_APPEND | syscall.O_WRONLY | os.O_CREATE, nil},
+ {file, syscall.O_APPEND | syscall.O_WRONLY | os.O_CREATE | os.O_TRUNC, nil},
+ {dir, syscall.O_RDONLY | syscall.O_TRUNC, syscall.ERROR_ACCESS_DENIED},
+ {dir, syscall.O_WRONLY | syscall.O_RDWR, syscall.EISDIR},
+ {dir, syscall.O_WRONLY, syscall.EISDIR},
+ {dir, syscall.O_RDWR, syscall.EISDIR},
}
for i, tt := range tests {
- h, err := syscall.Open(dir, tt.flag, 0)
+ h, err := syscall.Open(tt.path, tt.flag, 0o660)
if err == nil {
syscall.CloseHandle(h)
}
if err != tt.err {
- t.Errorf("%d: Open got %v, want %v", i, err, tt.err)
+ t.Errorf("%d: Open got %q, want %q", i, err, tt.err)
}
}
}