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

ZipFile.open changes file permissions when combined with Tempfile #102

Closed
ZachBeta opened this issue Oct 15, 2013 · 0 comments
Closed

ZipFile.open changes file permissions when combined with Tempfile #102

ZachBeta opened this issue Oct 15, 2013 · 0 comments

Comments

@ZachBeta
Copy link

This is unexpected behavior and caused some trouble with file permission errors on serving files from rails through apache.

Replicated here:

# ruby-2.0.0-p247
require 'tempfile'
require 'zip/zip' # rubyzip (0.9.9)

def print_and_chmod(file)
  puts sprintf("%o", File.stat(file.path).mode)
  file.chmod(0640)
  puts sprintf("after file.chmod: %o", File.stat(file.path).mode)
  File.chmod(0640, file.path)
  puts sprintf("after File.chmod: %o", File.stat(file.path).mode)
end

File.write('foo.txt', 'foo.txt')

FileUtils.mkdir_p 'temporary_dir'
Tempfile.open('foo.zip', 'temporary_dir') do |tempfile|
  puts 'Before ZipOutputStream.open, Before ZipFile.open:'
  print_and_chmod(tempfile)

  Zip::ZipOutputStream.open(tempfile) { |zos| } # make sure it's a zip

  puts 'After ZipOutputStream.open, Before ZipFile.open:'
  print_and_chmod(tempfile)

  Zip::ZipFile.open(tempfile.path, Zip::ZipFile::CREATE) do |zip|
    zip.add(tempfile.path, 'foo.txt')
  end

  puts 'After ZipFile.open:'
  print_and_chmod(tempfile)
end

FileUtils.rm('foo.txt')

Which displays:

Before ZipOutputStream.open, Before ZipFile.open:
100600
after file.chmod: 100640
after File.chmod: 100640
After ZipOutputStream.open, Before ZipFile.open:
100640
after file.chmod: 100640
after File.chmod: 100640
After ZipFile.open:
100600
after file.chmod: 100600
after File.chmod: 100640

If you'd like me to turn this into a test for the suite, I'd be more than willing. I just need to know where to add it.

githubmo pushed a commit to githubmo/rubyzip that referenced this issue Jan 6, 2014
…ypt-perf

* 'master' of https://github.com/rubyzip/rubyzip:
  Explicitly add the released 2.1.0 Ruby version Remove branch restriction
  Fix Rubinius by adding newly required gems, updating label in .travis.yml
  Update README.md
  Update README.md
  Make File.open_buffer support Tempfiles
  Version bump
  Update Changelog with Ruby 1.9 requirement
  Update README to reflect 1.9 requirement
  Fix rubyzip#106 Set options about restoring ownerships, permissions and times. restore permissions enabled by default.
  fix jRuby Building rubyzip#104
  Fix rubyzip#28 and rubyzip#103
  disable jRuby for a while
  Fix rubyzip#102 recover file permissions if zip file was exist
  Add missing Zip::Entry arguments to Zip::File#get_output_stream. Fixes rubyzip#100
  fix string encoding of zip64 header ids for ruby 2.0
  Add read/write support for zip64 extensions

Conflicts:
	lib/zip/extra_field.rb
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

No branches or pull requests

1 participant