diff --git a/lib/mixlib/archive/tar.rb b/lib/mixlib/archive/tar.rb index 30c8f9e..dcdb5b9 100644 --- a/lib/mixlib/archive/tar.rb +++ b/lib/mixlib/archive/tar.rb @@ -125,7 +125,7 @@ def is_tar_archive?(io) def read_tar_magic(io) io.rewind - magic = io.read(512).bytes[257..264].pack("C*") + magic = Array(io.read(512).bytes[257..264]).pack("C*") io.rewind magic end diff --git a/spec/mixlib/tar_spec.rb b/spec/mixlib/tar_spec.rb index f9e7373..3b4f71a 100644 --- a/spec/mixlib/tar_spec.rb +++ b/spec/mixlib/tar_spec.rb @@ -98,6 +98,13 @@ expect(extractor.send(:is_tar_archive?, raw)).to eq(false) end end + context "invalid small file" do + let(:data) { "testdir/#{Array.new(11) { "\x00" }.join}smallfile" } + it "does not identify an invalid header in a small file" do + extractor = described_class.new(tgz_archive) + expect(extractor.send(:is_tar_archive?, raw)).to eq(false) + end + end end end