aboutsummaryrefslogtreecommitdiffstats
path: root/lib/fileutils.rb
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-07-20 03:27:59 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-07-20 03:27:59 +0000
commit878384483d99fd4b887c5ddf44765b4178e72e42 (patch)
tree12a790b28d34fb35e5406846d4624f6e1ca06f38 /lib/fileutils.rb
parentb698066bbd6a760658a38971958adf08f0ec685c (diff)
downloadruby-878384483d99fd4b887c5ddf44765b4178e72e42.tar.gz
* lib/fileutils.rb (FileUtils::Entry_#copy): check file name
spearator boundary. [ruby-core:31360] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28685 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/fileutils.rb')
-rw-r--r--lib/fileutils.rb13
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/fileutils.rb b/lib/fileutils.rb
index 5905022c96..73e2bfe3c3 100644
--- a/lib/fileutils.rb
+++ b/lib/fileutils.rb
@@ -1240,7 +1240,7 @@ module FileUtils
when file?
copy_file dest
when directory?
- if !File.exist?(dest) and /^#{Regexp.quote(path)}/ =~ File.dirname(dest)
+ if !File.exist?(dest) and descendant_diretory?(dest, path)
raise ArgumentError, "cannot copy directory %s to itself %s" % [path, dest]
end
begin
@@ -1394,6 +1394,17 @@ module FileUtils
return File.path(base) if not dir or dir == '.'
File.join(dir, base)
end
+
+ if File::ALT_SEPARATOR
+ DIRECTORY_TERM = "(?=[/#{Regexp.quote(File::ALT_SEPARATOR)}]|\\z)".freeze
+ else
+ DIRECTORY_TERM = "(?=/|\\z)".freeze
+ end
+ SYSCASE = File::FNM_SYSCASE.nonzero? ? "-i" : ""
+
+ def descendant_diretory?(descendant, ascendant)
+ /\A(?#{SYSCASE}:#{Regexp.quote(ascendant)})#{DIRECTORY_TERM}/ =~ File.dirname(descendant)
+ end
end # class Entry_
def fu_list(arg) #:nodoc: