mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
pathname.rb: fix a Pathname#relative_path_from crash on
* ext/pathname/lib/pathname.rb (SAME_PATHS): Pathname#relative_path_from uses String#casecmp to compare strings on case-insensitive filesystem platforms (e.g., Windows). This can return nil for strings with different encodings, and the code previously assumed that it always returned a Fixnum. [Fix GH-713] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47591 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
065b6d2b7c
commit
8ae989f6b6
3 changed files with 23 additions and 1 deletions
|
@ -1,3 +1,11 @@
|
|||
Mon Sep 15 10:29:25 2014 Natalie Weizenbaum <nweiz@google.com>
|
||||
|
||||
* ext/pathname/lib/pathname.rb (SAME_PATHS):
|
||||
Pathname#relative_path_from uses String#casecmp to compare strings
|
||||
on case-insensitive filesystem platforms (e.g., Windows). This can
|
||||
return nil for strings with different encodings, and the code
|
||||
previously assumed that it always returned a Fixnum. [Fix GH-713]
|
||||
|
||||
Mon Sep 15 09:43:18 2014 Sho Hashimoto <sho.hsmt@gmail.com>
|
||||
|
||||
* ext/fiddle/lib/fiddle/import.rb (Fiddle::Importer#sizeof): fix typo,
|
||||
|
|
|
@ -22,7 +22,8 @@ class Pathname
|
|||
end
|
||||
|
||||
SAME_PATHS = if File::FNM_SYSCASE.nonzero?
|
||||
proc {|a, b| a.casecmp(b).zero?}
|
||||
# Avoid #zero? here because #casecmp can return nil.
|
||||
proc {|a, b| a.casecmp(b) == 0}
|
||||
else
|
||||
proc {|a, b| a == b}
|
||||
end
|
||||
|
|
|
@ -1374,4 +1374,17 @@ class TestPathname < Test::Unit::TestCase
|
|||
assert_equal("foo/bar", File.join(Pathname.new("foo"), Pathname.new("bar").taint))
|
||||
}.call
|
||||
end
|
||||
|
||||
def test_relative_path_from_casefold
|
||||
assert_separately([], <<-'end;') # do
|
||||
module File::Constants
|
||||
remove_const :FNM_SYSCASE
|
||||
FNM_SYSCASE = FNM_CASEFOLD
|
||||
end
|
||||
require 'pathname'
|
||||
foo = Pathname.new("fo\u{f6}")
|
||||
bar = Pathname.new("b\u{e4}r".encode("ISO-8859-1"))
|
||||
assert_instance_of(Pathname, foo.relative_path_from(bar))
|
||||
end;
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue