From: eregontp@... Date: 2016-04-21T22:31:44+00:00 Subject: [ruby-core:75079] [Ruby trunk Bug#12307] File.new and File.open change permissions even if the file exists on Windows Issue #12307 has been updated by Benoit Daloze. Usaku NAKAMURA wrote: > This behavior is derived from the implementation of MSVCRT. > Changing this is a little difficult because of the limitation of the Windows API. Does open(2) in MSVCRT causes this bug? Then it seems a bug since https://msdn.microsoft.com/en-us/library/aa298516%28v=vs.60%29.aspx mentions "The pmode argument is required only when _O_CREAT is specified. If the file already exists, pmode is ignored." ---------------------------------------- Bug #12307: File.new and File.open change permissions even if the file exists on Windows https://bugs.ruby-lang.org/issues/12307#change-58202 * 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: