From 742c48ecaeb7c624c475e02f3eb0827ebb4970d4 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 21 Oct 2019 16:20:38 +0200 Subject: [PATCH] windows: respect permission bits on file opening Chmod toggles the FILE_ATTRIBUTES_READONLY flag depending on the permission bits. That's a bit odd but I guess some compromises were made at some point and this is what was chosen to map to a Unix concept that Windows doesn't really have in the same way. That's fine. However, the logic used in Chmod was forgotten from Open, which then manifested itself in various places, most recently, go modules' read-only behavior. This corresonds with the syscall CL 202439. Updates golang/go#35033 Change-Id: Id8e74c5205057a74a35eda213516780b79a2aed2 Reviewed-on: https://go-review.googlesource.com/c/sys/+/202440 Run-TryBot: Jason A. Donenfeld TryBot-Result: Gobot Gobot Reviewed-by: Bryan C. Mills Reviewed-by: Alex Brainman --- windows/syscall_windows.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/windows/syscall_windows.go b/windows/syscall_windows.go index 90358693..034b5f40 100644 --- a/windows/syscall_windows.go +++ b/windows/syscall_windows.go @@ -410,7 +410,11 @@ func Open(path string, mode int, perm uint32) (fd Handle, err error) { default: createmode = OPEN_EXISTING } - h, e := CreateFile(pathp, access, sharemode, sa, createmode, FILE_ATTRIBUTE_NORMAL, 0) + var attrs uint32 = FILE_ATTRIBUTE_NORMAL + if perm&S_IWRITE == 0 { + attrs = FILE_ATTRIBUTE_READONLY + } + h, e := CreateFile(pathp, access, sharemode, sa, createmode, attrs, 0) return h, e }