From: nobu@... Date: 2017-05-22T07:49:24+00:00 Subject: [ruby-core:81328] [Ruby trunk Feature#13568] File#path for O_TMPFILE fds are unmeaning Issue #13568 has been updated by nobu (Nobuyoshi Nakada). shyouhei (Shyouhei Urabe) wrote: > nobu (Nobuyoshi Nakada) wrote: > > A correction; The method which `open` calls is `to_path`, not `path`. > > These are different. > > Yes, I'm talking about `File#path`. Situations like [ruby-core:81167](#change-64819) is in my mind. `#to_path` is a separate issue. `File#path` is not relevant to that situation at all. `Digest.file` just opens the argument, and `open` calls `to_path` method on it to implicit conversion. ```sh $ ruby -rdigest -e 'obj = Object.new; def obj.path;raise "path!"; end; Digest::MD5.file(obj)' Traceback (most recent call last): 4: from -e:1:in `
' 3: from /opt/local/lib/ruby/2.5.0/digest.rb:35:in `file' 2: from /opt/local/lib/ruby/2.5.0/digest.rb:50:in `file' 1: from /opt/local/lib/ruby/2.5.0/digest.rb:50:in `open' /opt/local/lib/ruby/2.5.0/digest.rb:50:in `initialize': no implicit conversion of Object into String (TypeError) ``` ```sh $ ruby -rdigest -e 'obj = Object.new; def obj.to_path;raise "to_path!"; end; Digest::MD5.file(obj)' Traceback (most recent call last): 5: from -e:1:in `
' 4: from /opt/local/lib/ruby/2.5.0/digest.rb:35:in `file' 3: from /opt/local/lib/ruby/2.5.0/digest.rb:50:in `file' 2: from /opt/local/lib/ruby/2.5.0/digest.rb:50:in `open' 1: from /opt/local/lib/ruby/2.5.0/digest.rb:50:in `initialize' -e:1:in `to_path': to_path! (RuntimeError) ``` > > > Do you think `nil` is better? I think nonexistent path is far more descriptive. > > > > The write mode problem is a matter. > > It would silently (and wrongly) success to write. > > What about adding a slash then? like: > > ``` > irb(main):001:0> open("/tmp/#165106976 (deleted / nonexistent)", "w") > Errno::ENOENT: No such file or directory @ rb_sysopen - /tmp/#165106976 (deleted / nonexistent) > from (irb):1:in `initialize' > from (irb):1:in `open' > ``` A dedicated exception such as "Unnamed temporary file in some path" from `to_path` would be more descriptive and better, I think. > > I think that `File#to_path` should raise if the path dost not exist, but untouch `File#path`. > > For `#to_path`, go to #13576. This issue is about `#path`, and I think adding description is the best known solution; leave it untouched does not save anything. I think this issue is false assertion at the first. ---------------------------------------- Feature #13568: File#path for O_TMPFILE fds are unmeaning https://bugs.ruby-lang.org/issues/13568#change-65018 * Author: sorah (Sorah Fukumori) * Status: Assigned * Priority: Normal * Assignee: sorah (Sorah Fukumori) * Target version: ---------------------------------------- By using File::TMPFILE (O_TMPFILE) allows us to create a file without directory entries. While open(2) with O_TMPFILE don't create a file without directory entries, it still requires a directory name to determine a file system to create a file. Current Ruby implementation holds such directory names in fptr->pathv and retrievable via File#path. But such paths are useless and may raise errors. For example, some code [1] checks File#path availability then when available, it attempts to use the path to open a file in different fd, finally raises Errno::EISDIR. This patch changes File#path (fptr->pathv) not to return String if a fd is opened with O_TMPFILE. [1]: https://github.com/aws/aws-sdk-ruby/blob/v2.9.17/aws-sdk-core/lib/aws-sdk-core/checksums.rb#L15 ---Files-------------------------------- tmpfile-path.patch (1.96 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: