Issue #12307 has been updated by Usaku NAKAMURA.


> The document does not explicitly forbids to change file permissions (except for O_TRUNC but the motivation seems to be to have well-defined semantics with concurrent access and change nothing but the file size), but I believe that to be an unexpected and unreasonable side-effect. If such a thing happens, then one could argue any random function taking extra arguments is allowed to change file permissions.

Of course, I agree with you.
I've failed to cloud the issue :-P


BTW, this problem occurs only when opening an existing file with `"w"` and mode `04xx`.
I think this is not a real use case, and this problem may not causes any real problem.
As shown above, this is the limitation of MSVCRT (and Windows API).
I want to leave this as a specification of Ruby on Windows (or, if you want to call so, a known bug).

----------------------------------------
Bug #12307: File.new and File.open change permissions even if the file exists on Windows
https://bugs.ruby-lang.org/issues/12307#change-58204

* Author: Benoit Daloze
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.2.4p230 (2015-12-16 revision 53155) [i386-mingw32]
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
For instance:

~~~
# New file
File.open("abc", "w", 0666) { |f|
  puts f.stat.mode.to_s(8) # => 100666, OK
}

# File exists
File.open("abc", "w", 0466) { |f|
  puts f.stat.mode.to_s(8) # => 100444, BUG
}
~~~

So the mode of the file was changed even though the file already exists.
This is inconsistent with the behavior on other platforms such as UNIX which only consider mode for new files.
open(2) is fairly clear about this on Linux and OS X: "if neither O_CREAT nor O_TMPFILE is specified, then mode is ignored".



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>