diff options
author | Jeremy Evans <code@jeremyevans.net> | 2021-06-17 10:13:33 -0700 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2021-06-24 12:22:09 -0700 |
commit | a2592702ae4c18662a162805aa06d88046742f05 (patch) | |
tree | da1580467b39ad5bc3f41fc68725571430748274 /test | |
parent | 189f154786fd6392633fefd50bd76e9bdb401b52 (diff) | |
download | ruby-a2592702ae4c18662a162805aa06d88046742f05.tar.gz |
Actually ignore FNM_CASEFOLD flag in Dir.glob
This was already documented as being ignored, but it wasn't being
ignored, causing an issue in a particular case where a UTF-8
pattern was provided and a filename was tested that wasn't valid
UTF-8.
Fixes [Bug #14456]
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_dir.rb | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/test/ruby/test_dir.rb b/test/ruby/test_dir.rb index bc91be4abf..bb268f2ab3 100644 --- a/test/ruby/test_dir.rb +++ b/test/ruby/test_dir.rb @@ -342,6 +342,17 @@ class TestDir < Test::Unit::TestCase assert_equal(%w[dir/], Dir.chdir(@root) {Dir.open("a") {|d| Dir.glob("**/*/", base: d, sort: false).sort}}) end + def test_glob_ignore_casefold_invalid_encoding + bug14456 = "[ruby-core:85448]" + filename = "\u00AAa123".encode('ISO-8859-1') + File.write(File.join(@root, filename), "") + matches = Dir.chdir(@root) {|d| Dir.glob("*a123".encode('UTF-8'), File::FNM_CASEFOLD)} + assert_equal(1, matches.size, bug14456) + matches.each{|f| f.force_encoding('ISO-8859-1')} + # Handle MacOS/Windows, which saves under a different filename + assert_include([filename, "\u00C2\u00AAa123".encode('ISO-8859-1')], matches.first, bug14456) + end + def assert_entries(entries, children_only = false) entries.sort! expected = ("a".."z").to_a |