Fix remove_entry error when path encoding is not compatible UTF-8

This commit is contained in:
Kazuhiro NISHIYAMA committed 2020-06-22 17:11:24 +09:00
1 parent 48d7ebe6fc
commit d231b8f95b
2 files changed
+22 -1

No files matched your search

+5 -1
View File
@@ -1287,7 +1287,11 @@ module FileUtils
def entries
opts = {}
opts[:encoding] = fu_windows? ? ::Encoding::UTF_8 : path.encoding
if fu_windows? && ::Encoding.compatible?(::Encoding::UTF_8, path.encoding)
opts[:encoding] = ::Encoding::UTF_8
else
opts[:encoding] = path.encoding
end
files = if Dir.respond_to?(:children)
Dir.children(path, **opts)
+17
View File
@@ -756,6 +756,23 @@ class TestFileUtils < Test::Unit::TestCase
assert_file_not_exist dir
end
def test_remove_entry_multibyte_path
c = "\u00a7"
begin
c = c.encode('filesystem')
rescue EncodingError
c = c.b
end
dir = "tmpdir#{c}"
my_rm_rf dir
Dir.mkdir dir
File.write("#{dir}/#{c}.txt", "test_remove_entry_multibyte_path")
remove_entry dir
assert_file_not_exist dir
end
def test_remove_entry_secure
check_singleton :remove_entry_secure