From edacb3a94ac275a62451f49bb2f70e9c1fc6619b Mon Sep 17 00:00:00 2001 From: akr Date: Mon, 5 May 2014 13:09:58 +0000 Subject: * ext/pathname/lib/pathname.rb (cleanpath_aggressive): make all separators File::SEPARATOR from File::ALT_SEPARATOR. Reported by Daniel Rikowski. Fixed by Nobuyoshi Nakada. [Bug #9618] * ext/pathname/lib/pathname.rb (cleanpath_conservative): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45827 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 9 +++++++++ ext/pathname/lib/pathname.rb | 2 ++ test/pathname/test_pathname.rb | 8 ++++++++ 3 files changed, 19 insertions(+) diff --git a/ChangeLog b/ChangeLog index 8a6828634c..217a515a85 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Mon May 5 21:52:35 2014 Tanaka Akira + + * ext/pathname/lib/pathname.rb (cleanpath_aggressive): make all + separators File::SEPARATOR from File::ALT_SEPARATOR. + Reported by Daniel Rikowski. + Fixed by Nobuyoshi Nakada. [Bug #9618] + + * ext/pathname/lib/pathname.rb (cleanpath_conservative): ditto. + Mon May 5 21:48:04 2014 Tanaka Akira * ext/pathname/lib/pathname.rb (Pathname#/): Aliased to Pathname#+. diff --git a/ext/pathname/lib/pathname.rb b/ext/pathname/lib/pathname.rb index 380e740399..e61aa2c081 100644 --- a/ext/pathname/lib/pathname.rb +++ b/ext/pathname/lib/pathname.rb @@ -113,6 +113,7 @@ class Pathname end end end + pre.tr!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR if /#{SEPARATOR_PAT}/o =~ File.basename(pre) names.shift while names[0] == '..' end @@ -161,6 +162,7 @@ class Pathname pre, base = r names.unshift base if base != '.' end + pre.tr!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR if /#{SEPARATOR_PAT}/o =~ File.basename(pre) names.shift while names[0] == '..' end diff --git a/test/pathname/test_pathname.rb b/test/pathname/test_pathname.rb index 24f6bb942d..110b78283c 100644 --- a/test/pathname/test_pathname.rb +++ b/test/pathname/test_pathname.rb @@ -88,6 +88,10 @@ class TestPathname < Test::Unit::TestCase defassert(:cleanpath_aggressive, '/', '///a/../..') end + if DOSISH + defassert(:cleanpath_aggressive, 'c:/foo/bar', 'c:\\foo\\bar') + end + def cleanpath_conservative(path) Pathname.new(path).cleanpath(true).to_s end @@ -124,6 +128,10 @@ class TestPathname < Test::Unit::TestCase defassert(:cleanpath_conservative, '/a', '/../.././../a') defassert(:cleanpath_conservative, 'a/b/../../../../c/../d', 'a/b/../../../../c/../d') + if DOSISH + defassert(:cleanpath_conservative, 'c:/foo/bar', 'c:\\foo\\bar') + end + if DOSISH_UNC defassert(:cleanpath_conservative, '//', '//') else -- cgit v1.2.3