• Jason A. Donenfeld's avatar
    syscall: respect permission bits on file opening on Windows · 16f0f9c8
    Jason A. Donenfeld authored
    On Windows, os.Chmod and syscall.Chmod toggle 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 os.Open and syscall.Open, which then manifested itself in various
    places, most recently, go modules' read-only behavior.
    
    This makes syscall.Open consistent with syscall.Chmod and adds a test
    for the permission _behavior_ using ioutil. By testing the behavior
    instead of explicitly testing for the attribute bits we care about, we
    make sure this doesn't regress in unforeseen ways in the future, as well
    as ensuring the test works on platforms other than Windows.
    
    In the process, we fix some tests that never worked and relied on broken
    behavior, as well as tests that were disabled on Windows due to the
    broken behavior and had TODO notes.
    
    Fixes #35033
    
    Change-Id: I6f7cf54517cbe5f6b1678d1c24f2ab337edcc7f7
    Reviewed-on: https://go-review.googlesource.com/c/go/+/202439
    Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
    Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
    Reviewed-by: default avatarAlex Brainman <alex.brainman@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    16f0f9c8
syscall_windows.go 41.2 KB