Project

General

Profile

Actions

Bug #12261

closed

Windows: File.dirname with 2+ / or 2+ \\ will return // or \\\\

Added by enebo (Thomas Enebo) over 5 years ago. Updated 5 months ago.

Status:
Closed
Priority:
Normal
Target version:
-
[ruby-core:74848]

Description

I am working through some File.dirname issues on JRuby and I saw a ruby/spec covering this behavior on windows:

File.dirname('/////').should == '//'

Same result if backslashes are used. Is there a reason for this result? It does not seem useful to me but I am not much of a windows user. I would think in this case it would be '/' since I don't see how this is useful for UNC paths in Ruby? If someone could explain it then I will document this at least in JRuby source code :)

So far all versions of MRI seem to have this behavior.

Updated by jeremyevans0 (Jeremy Evans) 5 months ago

  • Assignee set to usa (Usaku NAKAMURA)
  • Status changed from Open to Assigned

I'm not sure whether this behavior was originally expected, but I think changing it at this point isn't worth the backwards compatibility breakage. For example, consider the following:

dir = File.dirname(string) # string could be '/////'
File.read(File.join(dir, 'server', 'share'))

If you change the behavior of File.dirname from returning // to returning /, you change which file is read. In general, that's probably going to result an an Errno::ENOENT exception, but in the pathological case, it results in an unintended file being read.

usa (Usaku NAKAMURA) Can you please determine whether this is a bug?

Updated by nobu (Nobuyoshi Nakada) 5 months ago

  • Status changed from Assigned to Closed

It is a different thing from single '/' on Windows, like drive letters.

Actions

Also available in: Atom PDF