Skip to content

File.dirname interprets backslashes as path separators on Mac OS X #4116

@dlovellrw

Description

@dlovellrw

Environment

~/> ruby -v
jruby 1.7.21 (1.9.3p551) 2015-07-07 a741a82 on Java HotSpot(TM) 64-Bit Server VM 1.8.0_31-b13 +jit [darwin-x86_64]
~> uname -a
Darwin 15.6.0 Darwin Kernel Version 15.6.0: Thu Jun 23 18:25:34 PDT 2016; root:xnu-3248.60.10~1/RELEASE_X86_64 x86_64

Expected Behavior

~> ruby -v
ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-darwin15.6.0]
~> irb
irb(main):001:0> path = 'this/path/has/filename\that\contains\backslashes'
=> "this/path/has/filename\\that\\contains\\backslashes"
irb(main):002:0> File.dirname path
=> "this/path/has"
irb(main):003:0>
~> ruby -v
ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-darwin15]
~> irb
irb(main):001:0> path = 'this/path/has/filename\that\contains\backslashes'
=> "this/path/has/filename\\that\\contains\\backslashes"
irb(main):002:0> File.dirname path
=> "this/path/has"
irb(main):003:0>

Actual Behavior

~> ruby -v
jruby 1.7.21 (1.9.3p551) 2015-07-07 a741a82 on Java HotSpot(TM) 64-Bit Server VM 1.8.0_31-b13 +jit [darwin-x86_64]
~> irb
irb(main):001:0> path = 'this/path/has/filename\that\contains\backslashes'
=> "this/path/has/filename\\that\\contains\\backslashes"
irb(main):002:0> File.dirname path
=> "this/path/has/filename\\that\\contains"
irb(main):003:0>
~> ruby -v
jruby 9.1.2.0 (2.3.0) 2016-05-26 7357c8f Java HotSpot(TM) 64-Bit Server VM 25.31-b07 on 1.8.0_31-b13 +jit [darwin-x86_64]
~> irb
irb(main):001:0>  path = 'this/path/has/filename\that\contains\backslashes'
=> "this/path/has/filename\\that\\contains\\backslashes"
irb(main):002:0>  File.dirname path
=> "this/path/has/filename\\that\\contains"
irb(main):003:0>

Additional Information

The code in RubyFile.java uses hard-coded path separator values, e.g. line 724 if (endChar == '/' || endChar == '\\') {, rather than system dependent constants, such as Java File.separator.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions