Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix read_tar_magic to properly return an array when a file has less than 264 characters #30

Merged
merged 2 commits into from
Aug 28, 2018

Conversation

bdwyertech
Copy link
Contributor

@bdwyertech bdwyertech commented Aug 27, 2018

Description

In the case that a file is smaller than 264 characters, nil is returned rather than an array, alas the pack method is not available.

This is what is causing the AppVeyor build failure on ChefDK.

undefined method `pack' for nil:NilClass

Issues Resolved

Hopefully this allows us to bump mixlib-archive to address chef-boneyard/chef-dk#1663 via chef-boneyard/chef-dk#1664

Check List

@bdwyertech bdwyertech requested a review from a team August 27, 2018 21:28
@bdwyertech
Copy link
Contributor Author

bdwyertech commented Aug 27, 2018

With mixlib-archive 0.4.13

Failing

require 'mixlib/archive'

def tempdir
  @tmpdir ||= Dir.mktmpdir("chef-dk")
  File.realpath(@tmpdir)
end

working_dir = ::File.join(tempdir, 'policyfile_services_test_working_dir')

archive_file_path = ::File.join('example-policy-abc123.tgz')

Zlib::GzipWriter.open(archive_file_path) do |gz_file|
  gz_file << "lol this isn't a tar file"
end


def read_tar_magic(io)
  io.rewind
  magic = io.read(512).bytes[257..264].pack("C*")
  io.rewind
  magic
end

def is_tar_archive?(io)
   !(read_tar_magic(io) =~ /ustar\s{0,2}\x00/).nil?
end


raw = ::File.open(archive_file_path, 'rb')

is_tar_archive?(raw)

Passing (Cast as Array)

require 'mixlib/archive'

def tempdir
  @tmpdir ||= Dir.mktmpdir("chef-dk")
  File.realpath(@tmpdir)
end

working_dir = ::File.join(tempdir, 'policyfile_services_test_working_dir')

archive_file_path = ::File.join('example-policy-abc123.tgz')

Zlib::GzipWriter.open(archive_file_path) do |gz_file|
  gz_file << "lol this isn't a tar file"
end


def read_tar_magic(io)
  io.rewind
  magic = Array(io.read(512).bytes[257..264]).pack("C*")
  io.rewind
  magic
end

def is_tar_archive?(io)
   !(read_tar_magic(io) =~ /ustar\s{0,2}\x00/).nil?
end


raw = ::File.open(archive_file_path, 'rb')

is_tar_archive?(raw)

Signed-off-by: Brian Dwyer <brian.dwyer@broadridge.com>
@tas50 tas50 changed the title Fix read_tar_magic Fix read_tar_magic to properly return an array when a file has less than 264 characters Aug 28, 2018
@tas50 tas50 merged commit cf4ca99 into chef:master Aug 28, 2018
@tas50
Copy link
Contributor

tas50 commented Aug 28, 2018

Thanks for working this out and explaining it so well in the PR @bdwyertech

@bdwyertech bdwyertech deleted the fix_dk_test branch August 28, 2018 17:34
@bdwyertech
Copy link
Contributor Author

You are welcome @tas50 -- Also I updated the PR on ChefDK to 0.4.16 so once this gets released, that should hopefully pass...

netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Sep 23, 2018
## [v0.4.16](https://github.com/chef/mixlib-archive/tree/v0.4.16) (2018-08-28)

#### Merged Pull Requests
- Fix read_tar_magic to properly return an array when a file has less than 264 characters [#30](chef/mixlib-archive#30) ([bdwyertech](https://github.com/bdwyertech))
<!-- latest_release -->

<!-- release_rollup since=0.4.13 -->
### Changes not yet released to rubygems.org

#### Merged Pull Requests
- Fix read_tar_magic to properly return an array when a file has less than 264 characters [#30](chef/mixlib-archive#30) ([bdwyertech](https://github.com/bdwyertech)) <!-- 0.4.16 -->
- Fix mixlib-archive on Windows, add Appveyor [#31](chef/mixlib-archive#31) ([stuartpreston](https://github.com/stuartpreston)) <!-- 0.4.15 -->
- Ensure that paths like foo..bar.baz aren&#39;t ignored [#9](chef/mixlib-archive#9) ([thommay](https://github.com/thommay)) <!-- 0.4.14 -->
<!-- release_rollup -->

<!-- latest_stable_release -->
## [v0.4.13](https://github.com/chef/mixlib-archive/tree/v0.4.13) (2018-08-03)

#### Merged Pull Requests
- add codeowners [#24](chef/mixlib-archive#24) ([thommay](https://github.com/thommay))
- Move deps to the Gemfile and expand Rake tasks [#25](chef/mixlib-archive#25) ([tas50](https://github.com/tas50))
- Add github issue template &amp; standardize expeditor config [#26](chef/mixlib-archive#26) ([tas50](https://github.com/tas50))
- Update codeowners and add PR template [#27](chef/mixlib-archive#27) ([tas50](https://github.com/tas50))
- bugfix to make dir.chdir threadsafe [#29](chef/mixlib-archive#29) ([stevenoneill](https://github.com/stevenoneill))
<!-- latest_stable_release -->

## [v0.4.8](https://github.com/chef/mixlib-archive/tree/v0.4.8) (2018-06-21)

#### Merged Pull Requests
- Use the correct entry size for content with multi-byte characters. [#23](chef/mixlib-archive#23) ([coderanger](https://github.com/coderanger))
<!-- latest_release -->

<!-- release_rollup since=0.4.7 -->
### Changes not yet released to rubygems.org

#### Merged Pull Requests
- Use the correct entry size for content with multi-byte characters. [#23](chef/mixlib-archive#23) ([coderanger](https://github.com/coderanger)) <!-- 0.4.8 -->
<!-- release_rollup -->

<!-- latest_stable_release -->
## [v0.4.7](https://github.com/chef/mixlib-archive/tree/v0.4.7) (2018-06-07)

#### Merged Pull Requests
- fixup strange edge case around tar magic reading [#22](chef/mixlib-archive#22) ([spion06](https://github.com/spion06))
<!-- latest_stable_release -->

## [v0.4.6](https://github.com/chef/mixlib-archive/tree/v0.4.6) (2018-05-08)

#### Merged Pull Requests
- update tar magic to identify oldgnu style tar headers [#21](chef/mixlib-archive#21) ([spion06](https://github.com/spion06))

## [v0.4.5](https://github.com/chef/mixlib-archive/tree/v0.4.5) (2018-05-04)

#### Merged Pull Requests
- Fix up creating archives [#18](chef/mixlib-archive#18) ([thommay](https://github.com/thommay))
- Fix up writing tar archives with the rubygems tar [#19](chef/mixlib-archive#19) ([thommay](https://github.com/thommay))

## [v0.4.2](https://github.com/chef/mixlib-archive/tree/v0.4.2) (2018-04-25)

#### Merged Pull Requests
- use libarchive by preference [#17](chef/mixlib-archive#17) ([thommay](https://github.com/thommay))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants