From bb2033e53e43dabffc91ecb61bb6ab8286d94c7d Mon Sep 17 00:00:00 2001 From: Hiroshi Shirosaki Date: Wed, 16 Jan 2019 14:24:31 +0900 Subject: [PATCH] dir.c: fix Dir.glob with braces and matching dir * dir.c (join_path_from_pattern): add the last slash for directory matching. * test/ruby/test_dir.rb (test_glob_recursive_directory): add a test for above. [ruby-core:91110] [Bug #15540] --- dir.c | 4 ++++ test/ruby/test_dir.rb | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/dir.c b/dir.c index 2196344fc3..7e5b80793f 100644 --- a/dir.c +++ b/dir.c @@ -2052,6 +2052,10 @@ join_path_from_pattern(struct glob_pattern **beg) case RECURSIVE: str = "**"; break; + case MATCH_DIR: + /* append last slash */ + str = ""; + break; default: str = p->str; if (!str) continue; diff --git a/test/ruby/test_dir.rb b/test/ruby/test_dir.rb index e248c818b6..02b9c32202 100644 --- a/test/ruby/test_dir.rb +++ b/test/ruby/test_dir.rb @@ -191,6 +191,20 @@ def test_glob_recursive end end + def test_glob_recursive_directory + Dir.chdir(@root) do + ['d', 'e'].each do |path| + FileUtils.mkdir_p("c/#{path}/a/b/c") + FileUtils.touch("c/#{path}/a/a.file") + FileUtils.touch("c/#{path}/a/b/b.file") + FileUtils.touch("c/#{path}/a/b/c/c.file") + end + bug15540 = '[ruby-core:91110] [Bug #15540]' + assert_equal(["c/d/a/", "c/d/a/b/", "c/d/a/b/c/", "c/e/a/", "c/e/a/b/", "c/e/a/b/c/"], + Dir.glob('c/{d,e}/a/**/'), bug15540) + end + end + if Process.const_defined?(:RLIMIT_NOFILE) def test_glob_too_may_open_files assert_separately([], "#{<<-"begin;"}\n#{<<-'end;'}", chdir: @root) -- 2.17.1