Bug #1366


Pathname#relative_path_from should handle the scenario where the argument uses a different case for the Windows drive letter

Added by shri (Shri Borde) over 13 years ago. Updated over 11 years ago.

Target version:
ruby -v:


On Windows, the case of the drive letter can be either upper case or lower case (eg, "C:" or "c:") on the same machine at the same time in different Command Prompt Windows (see below for details). Dir.pwd will return either lower-case or upper-case for the drive letter (“C:/” or “c:/”) depending on the Command Prompt it is run from. However, FILE always uses lower-case drive letter. This can cause an ArgumentError when comparing Dir.pwd and FILE using Pathname#relative_path_from. This happens with version 1.9.1p0 as well. Pathname#relative_path_from should deal with the case where the case of the argument is different.

Here is the result when running from a Command Prompt which is using capital case for the drive letter as can be seen from the prompt "C:\Users\sborde".

C:\Users\sborde> cat c:\bugs\rb1.rb
require 'pathname'

C:\Users\sborde> c:\Ruby\bin\ruby.exe c:\bugs\test.rb
c:/Ruby/lib/ruby/1.8/pathname.rb:709:in `relative_path_from': different prefix:
"C:/" and "c:/bugs/test.rb" (ArgumentError)
from c:/bugs/test.rb:2

Here are the steps to get two Command Prompts with different cases for the drive letter:

  1. Create two shortcuts on the Desktop pointing to "c:\Windows\system32\cmd.exe"
  2. Right-click to change the properties.
  3. For one of the shortcuts, set the "Start in" folder to "C:" (upper case). For the other one, set it to "c:" (lower case).
  4. Double the click the shortcuts
  5. Observe that the prompt in the first one is "C:>" (upper case), and "c:" (lower case) in the second one.
  6. Run test.rb shown above from both Command Prompts. An ArgumentError will be thrown from the first Command Prompt with the upper case prompt.
Actions #1

Updated by nobu (Nobuyoshi Nakada) over 13 years ago

  • Category set to lib
  • Status changed from Open to Assigned
  • Assignee set to yugui (Yuki Sonoda)
  • Target version set to 1.9.1

Already fixed in r23093, and would be backported by the next patch release.

Actions #2

Updated by yugui (Yuki Sonoda) over 13 years ago

  • Status changed from Assigned to Closed




Also available in: Atom PDF