diff --git a/Library/Homebrew/test/unpack_strategy_spec.rb b/Library/Homebrew/test/unpack_strategy_spec.rb index 4d31c7604..1eb9dc3b5 100644 --- a/Library/Homebrew/test/unpack_strategy_spec.rb +++ b/Library/Homebrew/test/unpack_strategy_spec.rb @@ -59,6 +59,22 @@ describe UnpackStrategy do end end +describe DirectoryUnpackStrategy do + let(:path) { + mktmpdir.tap do |path| + FileUtils.touch path/"file" + FileUtils.ln_s "file", path/"symlink" + end + } + subject(:strategy) { described_class.new(path) } + let(:unpack_dir) { mktmpdir } + + it "does not follow symlinks" do + strategy.extract(to: unpack_dir) + expect(unpack_dir/"symlink").to be_a_symlink + end +end + describe UncompressedUnpackStrategy do let(:path) { (mktmpdir/"test").tap do |path| diff --git a/Library/Homebrew/unpack_strategy.rb b/Library/Homebrew/unpack_strategy.rb index 84def55eb..5062deb5f 100644 --- a/Library/Homebrew/unpack_strategy.rb +++ b/Library/Homebrew/unpack_strategy.rb @@ -96,7 +96,7 @@ class DirectoryUnpackStrategy < UnpackStrategy private def extract_to_dir(unpack_dir, basename:) - FileUtils.cp_r path.children, unpack_dir, preserve: true + FileUtils.cp_r File.join(path, "."), unpack_dir, preserve: true end end