* 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
This commit is contained in:
nobu 2010-07-20 03:27:59 +00:00
Родитель b698066bbd
Коммит 878384483d
3 изменённых файлов: 26 добавлений и 1 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Tue Jul 20 12:27:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* lib/fileutils.rb (FileUtils::Entry_#copy): check file name
spearator boundary. [ruby-core:31360]
Mon Jul 19 18:34:12 2010 Tanaka Akira <akr@fsij.org>
* ext/pathname/pathname.c (get_strpath): check the type.

Просмотреть файл

@ -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:

Просмотреть файл

@ -286,6 +286,15 @@ class TestFileUtils
assert_directory 'tmp/cpr_dest/d'
my_rm_rf 'tmp/cpr_src'
my_rm_rf 'tmp/cpr_dest'
bug3588 = '[ruby-core:31360]'
assert_nothing_raised(ArgumentError, bug3588) do
cp_r 'tmp', 'tmp2'
end
assert_directory 'tmp2/tmp'
assert_raise(ArgumentError, bug3588) do
cp_r 'tmp2', 'tmp2/new_tmp2'
end
end
def test_cp_r_symlink