mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Fix error in remove_entry
When `LANG=C`, dir is `UTF-8` and `base` is 'ASCII-8BIT` in `FileUtils::Entry_#join`.
So `Encoding::CompatibilityError` occurred and files are not removed.
20200611
T060002Z.fail.html.gz
```
1) Error:
WEBrick::TestFileHandler#test_cjk_in_path:
Errno::ENOTEMPTY: Directory not empty @ dir_s_rmdir - /home/chkbuild/chkbuild/tmp/build/20200611T060002Z/tmp/???20200611-1887828-3nn72a
/home/chkbuild/chkbuild/tmp/build/20200611T060002Z/ruby/lib/fileutils.rb:1460:in `rmdir'
/home/chkbuild/chkbuild/tmp/build/20200611T060002Z/ruby/lib/fileutils.rb:1460:in `block in remove_dir1'
/home/chkbuild/chkbuild/tmp/build/20200611T060002Z/ruby/lib/fileutils.rb:1471:in `platform_support'
/home/chkbuild/chkbuild/tmp/build/20200611T060002Z/ruby/lib/fileutils.rb:1459:in `remove_dir1'
/home/chkbuild/chkbuild/tmp/build/20200611T060002Z/ruby/lib/fileutils.rb:1452:in `remove'
/home/chkbuild/chkbuild/tmp/build/20200611T060002Z/ruby/lib/fileutils.rb:780:in `block in remove_entry'
/home/chkbuild/chkbuild/tmp/build/20200611T060002Z/ruby/lib/fileutils.rb:1509:in `ensure in postorder_traverse'
/home/chkbuild/chkbuild/tmp/build/20200611T060002Z/ruby/lib/fileutils.rb:1509:in `postorder_traverse'
/home/chkbuild/chkbuild/tmp/build/20200611T060002Z/ruby/lib/fileutils.rb:778:in `remove_entry'
/home/chkbuild/chkbuild/tmp/build/20200611T060002Z/ruby/lib/tmpdir.rb:97:in `mktmpdir'
/home/chkbuild/chkbuild/tmp/build/20200611T060002Z/ruby/test/webrick/test_filehandler.rb:292:in `test_cjk_in_path'
```
This commit is contained in:
parent
a6713a5758
commit
59646e8e29
2 changed files with 12 additions and 1 deletions
|
@ -1290,7 +1290,7 @@ module FileUtils
|
|||
|
||||
def entries
|
||||
opts = {}
|
||||
opts[:encoding] = ::Encoding::UTF_8 if fu_windows?
|
||||
opts[:encoding] = path.encoding
|
||||
|
||||
files = if Dir.respond_to?(:children)
|
||||
Dir.children(path, **opts)
|
||||
|
|
|
@ -741,6 +741,17 @@ class TestFileUtils < Test::Unit::TestCase
|
|||
assert_file_not_exist 'tmp/tmpdir3'
|
||||
end
|
||||
|
||||
def test_remove_entry_cjk_path
|
||||
dir = "tmpdir\u3042"
|
||||
my_rm_rf dir
|
||||
|
||||
Dir.mkdir dir
|
||||
File.write("#{dir}/\u3042.txt", "test_remove_entry_cjk_path")
|
||||
|
||||
remove_entry dir
|
||||
assert_file_not_exist dir
|
||||
end
|
||||
|
||||
def test_remove_entry_secure
|
||||
check_singleton :remove_entry_secure
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue