rubyzip 1.1.7 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubyzip might be problematic. Click here for more details.

Files changed (106) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +87 -45
  3. data/Rakefile +3 -4
  4. data/lib/zip.rb +11 -5
  5. data/lib/zip/central_directory.rb +8 -8
  6. data/lib/zip/compressor.rb +1 -2
  7. data/lib/zip/constants.rb +5 -5
  8. data/lib/zip/crypto/null_encryption.rb +4 -6
  9. data/lib/zip/crypto/traditional_encryption.rb +5 -5
  10. data/lib/zip/decompressor.rb +3 -3
  11. data/lib/zip/deflater.rb +8 -6
  12. data/lib/zip/dos_time.rb +5 -6
  13. data/lib/zip/entry.rb +120 -128
  14. data/lib/zip/entry_set.rb +14 -14
  15. data/lib/zip/errors.rb +1 -0
  16. data/lib/zip/extra_field.rb +8 -8
  17. data/lib/zip/extra_field/generic.rb +8 -8
  18. data/lib/zip/extra_field/ntfs.rb +14 -16
  19. data/lib/zip/extra_field/old_unix.rb +9 -10
  20. data/lib/zip/extra_field/universal_time.rb +14 -14
  21. data/lib/zip/extra_field/unix.rb +8 -9
  22. data/lib/zip/extra_field/zip64.rb +12 -11
  23. data/lib/zip/extra_field/zip64_placeholder.rb +1 -2
  24. data/lib/zip/file.rb +81 -81
  25. data/lib/zip/filesystem.rb +144 -143
  26. data/lib/zip/inflater.rb +5 -5
  27. data/lib/zip/input_stream.rb +22 -13
  28. data/lib/zip/ioextras.rb +1 -3
  29. data/lib/zip/ioextras/abstract_input_stream.rb +6 -10
  30. data/lib/zip/ioextras/abstract_output_stream.rb +3 -5
  31. data/lib/zip/null_compressor.rb +2 -2
  32. data/lib/zip/null_decompressor.rb +3 -3
  33. data/lib/zip/null_input_stream.rb +0 -0
  34. data/lib/zip/output_stream.rb +13 -14
  35. data/lib/zip/pass_thru_compressor.rb +4 -4
  36. data/lib/zip/pass_thru_decompressor.rb +3 -4
  37. data/lib/zip/streamable_directory.rb +2 -2
  38. data/lib/zip/streamable_stream.rb +3 -3
  39. data/lib/zip/version.rb +1 -1
  40. data/samples/example.rb +29 -39
  41. data/samples/example_filesystem.rb +16 -18
  42. data/samples/example_recursive.rb +31 -25
  43. data/samples/{gtkRubyzip.rb → gtk_ruby_zip.rb} +23 -25
  44. data/samples/qtzip.rb +18 -27
  45. data/samples/write_simple.rb +12 -13
  46. data/samples/zipfind.rb +26 -34
  47. data/test/basic_zip_file_test.rb +11 -15
  48. data/test/case_sensitivity_test.rb +69 -0
  49. data/test/central_directory_entry_test.rb +32 -36
  50. data/test/central_directory_test.rb +46 -50
  51. data/test/crypto/null_encryption_test.rb +8 -4
  52. data/test/crypto/traditional_encryption_test.rb +5 -5
  53. data/test/data/gpbit3stored.zip +0 -0
  54. data/test/data/notzippedruby.rb +1 -1
  55. data/test/data/oddExtraField.zip +0 -0
  56. data/test/data/path_traversal/Makefile +10 -0
  57. data/test/data/path_traversal/jwilk/README.md +5 -0
  58. data/test/data/path_traversal/jwilk/absolute1.zip +0 -0
  59. data/test/data/path_traversal/jwilk/absolute2.zip +0 -0
  60. data/test/data/path_traversal/jwilk/dirsymlink.zip +0 -0
  61. data/test/data/path_traversal/jwilk/dirsymlink2a.zip +0 -0
  62. data/test/data/path_traversal/jwilk/dirsymlink2b.zip +0 -0
  63. data/test/data/path_traversal/jwilk/relative0.zip +0 -0
  64. data/test/data/path_traversal/jwilk/relative2.zip +0 -0
  65. data/test/data/path_traversal/jwilk/symlink.zip +0 -0
  66. data/test/data/path_traversal/relative1.zip +0 -0
  67. data/test/data/path_traversal/tilde.zip +0 -0
  68. data/test/data/path_traversal/tuzovakaoff/README.md +3 -0
  69. data/test/data/path_traversal/tuzovakaoff/absolutepath.zip +0 -0
  70. data/test/data/path_traversal/tuzovakaoff/symlink.zip +0 -0
  71. data/test/data/rubycode.zip +0 -0
  72. data/test/data/test.xls +0 -0
  73. data/test/deflater_test.rb +10 -12
  74. data/test/encryption_test.rb +2 -2
  75. data/test/entry_set_test.rb +50 -25
  76. data/test/entry_test.rb +76 -87
  77. data/test/errors_test.rb +1 -2
  78. data/test/extra_field_test.rb +19 -21
  79. data/test/file_extract_directory_test.rb +12 -14
  80. data/test/file_extract_test.rb +33 -40
  81. data/test/file_permissions_test.rb +65 -0
  82. data/test/file_split_test.rb +24 -27
  83. data/test/file_test.rb +266 -179
  84. data/test/filesystem/dir_iterator_test.rb +13 -17
  85. data/test/filesystem/directory_test.rb +101 -93
  86. data/test/filesystem/file_mutating_test.rb +52 -65
  87. data/test/filesystem/file_nonmutating_test.rb +223 -229
  88. data/test/filesystem/file_stat_test.rb +17 -19
  89. data/test/gentestfiles.rb +54 -62
  90. data/test/inflater_test.rb +1 -1
  91. data/test/input_stream_test.rb +52 -40
  92. data/test/ioextras/abstract_input_stream_test.rb +22 -23
  93. data/test/ioextras/abstract_output_stream_test.rb +33 -33
  94. data/test/ioextras/fake_io_test.rb +1 -1
  95. data/test/local_entry_test.rb +36 -38
  96. data/test/output_stream_test.rb +20 -21
  97. data/test/pass_thru_compressor_test.rb +5 -6
  98. data/test/pass_thru_decompressor_test.rb +0 -1
  99. data/test/path_traversal_test.rb +141 -0
  100. data/test/samples/example_recursive_test.rb +37 -0
  101. data/test/settings_test.rb +18 -15
  102. data/test/test_helper.rb +52 -46
  103. data/test/unicode_file_names_and_comments_test.rb +17 -7
  104. data/test/zip64_full_test.rb +10 -12
  105. data/test/zip64_support_test.rb +0 -1
  106. metadata +94 -65
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 21b11d72a619a00f577f3ac15a65d309d07ab57b
4
- data.tar.gz: d2c28c4157e692118e26478c34205094eb2ca055
2
+ SHA256:
3
+ metadata.gz: 971ff85e75ec367c6d983a2c5fdcb24f8c5d1a4a450068b6b925a2df735cd1aa
4
+ data.tar.gz: 665b1e4f89f765cd9138222b08ac7759ee8e3ad4ad6e7c68171f2afb523b2f9f
5
5
  SHA512:
6
- metadata.gz: 935e9064b3fc98693e8e0eef68f147b9a62ba4dcf25c9f42cf9828a544665d749fd8ff5866b52183a569171fd3aecddb09613d526da1bc43bf34c0b556bcea02
7
- data.tar.gz: b9e36842ed0830befe3ca556b954757975291f8c523be419213c5974015742e41c4bb4a4b44c88a746ad22f7656f23162cf5e5d5e7591d917927ae9830ad8dae
6
+ metadata.gz: 4322b88da024f5625fa1824c80a8ee8b07e9970baea5937b5a11004d21038a590aeb07c4beb2296d639fb67c1146f2ace736bef7faffb87afcc065538df37afb
7
+ data.tar.gz: 77ba210a9a4d66b35fa43a75ac72126c0df5fb65d04e79c50e2168698aeae66a8cf19c27fb86ccb39a6670a3e079bda953c22fd9917ed7a7b0f33c83753e3107
data/README.md CHANGED
@@ -1,14 +1,15 @@
1
1
  # rubyzip
2
+
2
3
  [![Gem Version](https://badge.fury.io/rb/rubyzip.svg)](http://badge.fury.io/rb/rubyzip)
3
4
  [![Build Status](https://secure.travis-ci.org/rubyzip/rubyzip.svg)](http://travis-ci.org/rubyzip/rubyzip)
4
5
  [![Code Climate](https://codeclimate.com/github/rubyzip/rubyzip.svg)](https://codeclimate.com/github/rubyzip/rubyzip)
5
6
  [![Coverage Status](https://img.shields.io/coveralls/rubyzip/rubyzip.svg)](https://coveralls.io/r/rubyzip/rubyzip?branch=master)
6
7
 
7
- rubyzip is a ruby library for reading and writing zip files.
8
+ Rubyzip is a ruby library for reading and writing zip files.
8
9
 
9
10
  ## Important note
10
11
 
11
- Rubyzip interface changed!!! No need to do `require "zip/zip"` and `Zip` prefix in class names removed.
12
+ The Rubyzip interface has changed!!! No need to do `require "zip/zip"` and `Zip` prefix in class names removed.
12
13
 
13
14
  If you have issues with any third-party gems that require an old version of rubyzip, you can use this workaround:
14
15
 
@@ -19,10 +20,11 @@ gem 'zip-zip' # will load compatibility for old rubyzip API.
19
20
 
20
21
  ## Requirements
21
22
 
22
- * Ruby 1.9.2 or greater
23
+ - Ruby 1.9.2 or greater
23
24
 
24
25
  ## Installation
25
- rubyzip is available on RubyGems, so:
26
+
27
+ Rubyzip is available on RubyGems:
26
28
 
27
29
  ```
28
30
  gem install rubyzip
@@ -52,65 +54,76 @@ Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
52
54
  # Two arguments:
53
55
  # - The name of the file as it will appear in the archive
54
56
  # - The original file, including the path to find it
55
- zipfile.add(filename, folder + '/' + filename)
57
+ zipfile.add(filename, File.join(folder, filename))
56
58
  end
57
- zipfile.get_output_stream("myFile") { |os| os.write "myFile contains just this" }
59
+ zipfile.get_output_stream("myFile") { |f| f.write "myFile contains just this" }
58
60
  end
59
61
  ```
60
62
 
61
63
  ### Zipping a directory recursively
62
- Copy from [here](https://github.com/rubyzip/rubyzip/blob/05916bf89181e1955118fd3ea059f18acac28cc8/samples/example_recursive.rb )
64
+
65
+ Copy from [here](https://github.com/rubyzip/rubyzip/blob/9d891f7353e66052283562d3e252fe380bb4b199/samples/example_recursive.rb)
63
66
 
64
67
  ```ruby
65
- require 'rubygems'
66
68
  require 'zip'
69
+
67
70
  # This is a simple example which uses rubyzip to
68
71
  # recursively generate a zip file from the contents of
69
72
  # a specified directory. The directory itself is not
70
73
  # included in the archive, rather just its contents.
71
74
  #
72
75
  # Usage:
73
- # require /path/to/the/ZipFileGenerator/Class
74
- # directoryToZip = "/tmp/input"
75
- # outputFile = "/tmp/out.zip"
76
- # zf = ZipFileGenerator.new(directoryToZip, outputFile)
77
- # zf.write()
78
-
76
+ # directory_to_zip = "/tmp/input"
77
+ # output_file = "/tmp/out.zip"
78
+ # zf = ZipFileGenerator.new(directory_to_zip, output_file)
79
+ # zf.write()
79
80
  class ZipFileGenerator
80
81
  # Initialize with the directory to zip and the location of the output archive.
81
- def initialize(inputDir, outputFile)
82
- @inputDir = inputDir
83
- @outputFile = outputFile
82
+ def initialize(input_dir, output_file)
83
+ @input_dir = input_dir
84
+ @output_file = output_file
84
85
  end
86
+
85
87
  # Zip the input directory.
86
- def write()
87
- entries = Dir.entries(@inputDir); entries.delete("."); entries.delete("..")
88
- io = Zip::File.open(@outputFile, Zip::File::CREATE);
89
- writeEntries(entries, "", io)
90
- io.close();
88
+ def write
89
+ entries = Dir.entries(@input_dir) - %w[. ..]
90
+
91
+ ::Zip::File.open(@output_file, ::Zip::File::CREATE) do |zipfile|
92
+ write_entries entries, '', zipfile
93
+ end
91
94
  end
92
- # A helper method to make the recursion work.
95
+
93
96
  private
94
- def writeEntries(entries, path, io)
95
- entries.each { |e|
96
- zipFilePath = path == "" ? e : File.join(path, e)
97
- diskFilePath = File.join(@inputDir, zipFilePath)
98
- puts "Deflating " + diskFilePath
99
- if File.directory?(diskFilePath)
100
- io.mkdir(zipFilePath)
101
- subdir =Dir.entries(diskFilePath); subdir.delete("."); subdir.delete("..")
102
- writeEntries(subdir, zipFilePath, io)
97
+
98
+ # A helper method to make the recursion work.
99
+ def write_entries(entries, path, zipfile)
100
+ entries.each do |e|
101
+ zipfile_path = path == '' ? e : File.join(path, e)
102
+ disk_file_path = File.join(@input_dir, zipfile_path)
103
+
104
+ if File.directory? disk_file_path
105
+ recursively_deflate_directory(disk_file_path, zipfile, zipfile_path)
103
106
  else
104
- io.get_output_stream(zipFilePath) { |f| f.print(File.open(diskFilePath, "rb").read())}
107
+ put_into_archive(disk_file_path, zipfile, zipfile_path)
105
108
  end
106
- }
109
+ end
110
+ end
111
+
112
+ def recursively_deflate_directory(disk_file_path, zipfile, zipfile_path)
113
+ zipfile.mkdir zipfile_path
114
+ subdir = Dir.entries(disk_file_path) - %w[. ..]
115
+ write_entries subdir, zipfile_path, zipfile
116
+ end
117
+
118
+ def put_into_archive(disk_file_path, zipfile, zipfile_path)
119
+ zipfile.add(zipfile_path, disk_file_path)
107
120
  end
108
121
  end
109
122
  ```
110
123
 
111
124
  ### Save zip archive entries in sorted by name state
112
125
 
113
- To saving zip archives in sorted order like below you need to set `::Zip.sort_entries` to `true`
126
+ To save zip archives in sorted order like below, you need to set `::Zip.sort_entries` to `true`
114
127
 
115
128
  ```
116
129
  Vegetable/
@@ -124,7 +137,17 @@ fruit/mango
124
137
  fruit/orange
125
138
  ```
126
139
 
127
- After this entries in zip archive will be saved in ordered state.
140
+ After this, entries in the zip archive will be saved in ordered state.
141
+
142
+ ### Default permissions of zip archives
143
+
144
+ On Posix file systems the default file permissions applied to a new archive
145
+ are (0666 - umask), which mimics the behavior of standard tools such as `touch`.
146
+
147
+ On Windows the default file permissions are set to 0644 as suggested by the
148
+ [Ruby File documentation](http://ruby-doc.org/core-2.2.2/File.html).
149
+
150
+ When modifying a zip archive the file permissions of the archive are preserved.
128
151
 
129
152
  ### Reading a Zip file
130
153
 
@@ -146,9 +169,19 @@ Zip::File.open('foo.zip') do |zip_file|
146
169
  end
147
170
  ```
148
171
 
172
+ #### Notice about ::Zip::InputStream
173
+
174
+ `::Zip::InputStream` usable for fast reading zip file content because it not read Central directory.
175
+
176
+ But there is one exception when it is not working - General Purpose Flag Bit 3.
177
+
178
+ > If bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written. The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure (optionally preceded by a 4-byte signature) immediately after the compressed data
179
+
180
+ If `::Zip::InputStream` finds such entry in the zip archive it will raise an exception.
181
+
149
182
  ### Password Protection (Experimental)
150
183
 
151
- RubyZip supports reading/writing zip files with traditional zip encryption (a.k.a. "ZipCrypto"). AES encryption is not yet supported. It can be used with buffer streams, e.g.:
184
+ Rubyzip supports reading/writing zip files with traditional zip encryption (a.k.a. "ZipCrypto"). AES encryption is not yet supported. It can be used with buffer streams, e.g.:
152
185
 
153
186
  ```ruby
154
187
  Zip::OutputStream.write_buffer(::StringIO.new(''), Zip::TraditionalEncrypter.new('password')) do |out|
@@ -181,12 +214,12 @@ buffer = Zip::OutputStream.write_buffer do |out|
181
214
  out.write rels.to_xml(:indent => 0).gsub("\n","")
182
215
  end
183
216
 
184
- File.open(new_path, "w") {|f| f.write(buffer.string) }
217
+ File.open(new_path, "wb") {|f| f.write(buffer.string) }
185
218
  ```
186
219
 
187
220
  ## Configuration
188
221
 
189
- By default, rubyzip will not overwrite files if they already exist inside of the extracted path. To change this behavior, you may specify a configuration option like so:
222
+ By default, rubyzip will not overwrite files if they already exist inside of the extracted path. To change this behavior, you may specify a configuration option like so:
190
223
 
191
224
  ```ruby
192
225
  Zip.on_exists_proc = true
@@ -200,13 +233,13 @@ Additionally, if you want to configure rubyzip to overwrite existing files while
200
233
  Zip.continue_on_exists_proc = true
201
234
  ```
202
235
 
203
- If you want to store non english names and want to open properly file on Windows(pre 7) you need to set next option:
236
+ If you want to store non-english names and want to open them on Windows(pre 7) you need to set this option:
204
237
 
205
238
  ```ruby
206
239
  Zip.unicode_names = true
207
240
  ```
208
241
 
209
- In some zip date of files stored in incorrect format. You can hide warning about it by using:
242
+ Some zip files might have an invalid date format, which will raise a warning. You can hide this warning with the following setting:
210
243
 
211
244
  ```ruby
212
245
  Zip.warn_invalid_date = false
@@ -217,9 +250,18 @@ You can set the default compression level like so:
217
250
  ```ruby
218
251
  Zip.default_compression = Zlib::DEFAULT_COMPRESSION
219
252
  ```
253
+
220
254
  It defaults to `Zlib::DEFAULT_COMPRESSION`. Possible values are `Zlib::BEST_COMPRESSION`, `Zlib::DEFAULT_COMPRESSION` and `Zlib::NO_COMPRESSION`
221
255
 
222
- All settings in same time
256
+ Sometimes file names inside zip contain non-ASCII characters. If you can assume which encoding was used for such names and want to be able to find such entries using `find_entry` then you can force assumed encoding like so:
257
+
258
+ ```ruby
259
+ Zip.force_entry_names_encoding = 'UTF-8'
260
+ ```
261
+
262
+ Allowed encoding names are the same as accepted by `String#force_encoding`
263
+
264
+ You can set multiple settings at the same time by using a block:
223
265
 
224
266
  ```ruby
225
267
  Zip.setup do |c|
@@ -230,7 +272,7 @@ All settings in same time
230
272
  end
231
273
  ```
232
274
 
233
- By default Zip64 support is disabled for writing. To enable it do next:
275
+ By default, Zip64 support is disabled for writing. To enable it do this:
234
276
 
235
277
  ```ruby
236
278
  Zip.write_zip64_support = true
@@ -240,7 +282,7 @@ _NOTE_: If you will enable Zip64 writing then you will need zip extractor with Z
240
282
 
241
283
  ## Developing
242
284
 
243
- To run tests you need run next commands:
285
+ To run the test you need to do this:
244
286
 
245
287
  ```
246
288
  bundle install
@@ -267,5 +309,5 @@ extra-field support contributed by Tatsuki Sugiura (sugi at nemui.org)
267
309
 
268
310
  ## License
269
311
 
270
- rubyzip is distributed under the same license as ruby. See
312
+ Rubyzip is distributed under the same license as ruby. See
271
313
  http://www.ruby-lang.org/en/LICENSE.txt
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rake/testtask'
3
3
 
4
- task :default => :test
4
+ task default: :test
5
5
 
6
6
  Rake::TestTask.new(:test) do |test|
7
7
  test.libs << 'lib'
@@ -10,10 +10,9 @@ Rake::TestTask.new(:test) do |test|
10
10
  test.verbose = true
11
11
  end
12
12
 
13
- #Rake::TestTask.new(:zip64_full_test) do |test|
13
+ # Rake::TestTask.new(:zip64_full_test) do |test|
14
14
  # test.libs << File.join(File.dirname(__FILE__), 'lib')
15
15
  # test.libs << File.join(File.dirname(__FILE__), 'test')
16
16
  # test.pattern = File.join(File.dirname(__FILE__), 'test/zip64_full_test.rb')
17
17
  # test.verbose = true
18
- #end
19
-
18
+ # end
data/lib/zip.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'delegate'
2
2
  require 'singleton'
3
3
  require 'tempfile'
4
+ require 'tmpdir'
4
5
  require 'fileutils'
5
6
  require 'stringio'
6
7
  require 'zlib'
@@ -30,14 +31,18 @@ require 'zip/streamable_stream'
30
31
  require 'zip/streamable_directory'
31
32
  require 'zip/constants'
32
33
  require 'zip/errors'
33
- if defined? JRUBY_VERSION
34
- require 'jruby'
35
- JRuby.objectspace = true
36
- end
37
34
 
38
35
  module Zip
39
36
  extend self
40
- attr_accessor :unicode_names, :on_exists_proc, :continue_on_exists_proc, :sort_entries, :default_compression, :write_zip64_support, :warn_invalid_date
37
+ attr_accessor :unicode_names,
38
+ :on_exists_proc,
39
+ :continue_on_exists_proc,
40
+ :sort_entries,
41
+ :default_compression,
42
+ :write_zip64_support,
43
+ :warn_invalid_date,
44
+ :case_insensitive_match,
45
+ :force_entry_names_encoding
41
46
 
42
47
  def reset!
43
48
  @_ran_once = false
@@ -48,6 +53,7 @@ module Zip
48
53
  @default_compression = ::Zlib::DEFAULT_COMPRESSION
49
54
  @write_zip64_support = false
50
55
  @warn_invalid_date = true
56
+ @case_insensitive_match = false
51
57
  end
52
58
 
53
59
  def setup
@@ -5,7 +5,7 @@ module Zip
5
5
  END_OF_CDS = 0x06054b50
6
6
  ZIP64_END_OF_CDS = 0x06064b50
7
7
  ZIP64_EOCD_LOCATOR = 0x07064b50
8
- MAX_END_OF_CDS_SIZE = 65536 + 18
8
+ MAX_END_OF_CDS_SIZE = 65_536 + 18
9
9
  STATIC_EOCD_SIZE = 22
10
10
 
11
11
  attr_reader :comment
@@ -96,7 +96,7 @@ module Zip
96
96
  @size_in_bytes = Entry.read_zip_64_long(buf)
97
97
  @cdir_offset = Entry.read_zip_64_long(buf)
98
98
  @zip_64_extensible = buf.slice!(0, buf.bytesize)
99
- raise Error, "Zip consistency problem while reading eocd structure" unless buf.size == 0
99
+ raise Error, 'Zip consistency problem while reading eocd structure' unless buf.empty?
100
100
  end
101
101
 
102
102
  def read_e_o_c_d(buf) #:nodoc:
@@ -113,14 +113,14 @@ module Zip
113
113
  else
114
114
  buf.read(comment_length)
115
115
  end
116
- raise Error, "Zip consistency problem while reading eocd structure" unless buf.size == 0
116
+ raise Error, 'Zip consistency problem while reading eocd structure' unless buf.empty?
117
117
  end
118
118
 
119
119
  def read_central_directory_entries(io) #:nodoc:
120
120
  begin
121
121
  io.seek(@cdir_offset, IO::SEEK_SET)
122
122
  rescue Errno::EINVAL
123
- raise Error, "Zip consistency problem while reading central directory entry"
123
+ raise Error, 'Zip consistency problem while reading central directory entry'
124
124
  end
125
125
  @entry_set = EntrySet.new
126
126
  @size.times do
@@ -130,7 +130,7 @@ module Zip
130
130
 
131
131
  def read_from_stream(io) #:nodoc:
132
132
  buf = start_buf(io)
133
- if self.zip64_file?(buf)
133
+ if zip64_file?(buf)
134
134
  read_64_e_o_c_d(buf)
135
135
  else
136
136
  read_e_o_c_d(buf)
@@ -140,7 +140,7 @@ module Zip
140
140
 
141
141
  def get_e_o_c_d(buf) #:nodoc:
142
142
  sig_index = buf.rindex([END_OF_CDS].pack('V'))
143
- raise Error, "Zip end of central directory signature not found" unless sig_index
143
+ raise Error, 'Zip end of central directory signature not found' unless sig_index
144
144
  buf = buf.slice!((sig_index + 4)..(buf.bytesize))
145
145
 
146
146
  def buf.read(count)
@@ -165,9 +165,9 @@ module Zip
165
165
 
166
166
  def get_64_e_o_c_d(buf) #:nodoc:
167
167
  zip_64_start = buf.rindex([ZIP64_END_OF_CDS].pack('V'))
168
- raise Error, "Zip64 end of central directory signature not found" unless zip_64_start
168
+ raise Error, 'Zip64 end of central directory signature not found' unless zip_64_start
169
169
  zip_64_locator = buf.rindex([ZIP64_EOCD_LOCATOR].pack('V'))
170
- raise Error, "Zip64 end of central directory signature locator not found" unless zip_64_locator
170
+ raise Error, 'Zip64 end of central directory signature locator not found' unless zip_64_locator
171
171
  buf = buf.slice!((zip_64_start + 4)..zip_64_locator)
172
172
 
173
173
  def buf.read(count)
@@ -1,7 +1,6 @@
1
1
  module Zip
2
2
  class Compressor #:nodoc:all
3
- def finish
4
- end
3
+ def finish; end
5
4
  end
6
5
  end
7
6
 
@@ -6,14 +6,14 @@ module Zip
6
6
 
7
7
  LOCAL_ENTRY_SIGNATURE = 0x04034b50
8
8
  LOCAL_ENTRY_STATIC_HEADER_LENGTH = 30
9
- LOCAL_ENTRY_TRAILING_DESCRIPTOR_LENGTH = 4+4+4
9
+ LOCAL_ENTRY_TRAILING_DESCRIPTOR_LENGTH = 4 + 4 + 4
10
10
  VERSION_MADE_BY = 52 # this library's version
11
11
  VERSION_NEEDED_TO_EXTRACT = 20
12
12
  VERSION_NEEDED_TO_EXTRACT_ZIP64 = 45
13
13
 
14
- FILE_TYPE_FILE = 010
15
- FILE_TYPE_DIR = 004
16
- FILE_TYPE_SYMLINK = 012
14
+ FILE_TYPE_FILE = 0o10
15
+ FILE_TYPE_DIR = 0o04
16
+ FILE_TYPE_SYMLINK = 0o12
17
17
 
18
18
  FSTYPE_FAT = 0
19
19
  FSTYPE_AMIGA = 1
@@ -58,6 +58,6 @@ module Zip
58
58
  FSTYPE_TANDEM => 'Tandem NSK'.freeze,
59
59
  FSTYPE_THEOS => 'Theos'.freeze,
60
60
  FSTYPE_MAC_OSX => 'Mac OS/X (Darwin)'.freeze,
61
- FSTYPE_ATHEOS => 'AtheOS'.freeze,
61
+ FSTYPE_ATHEOS => 'AtheOS'.freeze
62
62
  }.freeze
63
63
  end
@@ -12,7 +12,7 @@ module Zip
12
12
  class NullEncrypter < Encrypter
13
13
  include NullEncryption
14
14
 
15
- def header(mtime)
15
+ def header(_mtime)
16
16
  ''
17
17
  end
18
18
 
@@ -20,12 +20,11 @@ module Zip
20
20
  data
21
21
  end
22
22
 
23
- def data_descriptor(crc32, compressed_size, uncomprssed_size)
23
+ def data_descriptor(_crc32, _compressed_size, _uncomprssed_size)
24
24
  ''
25
25
  end
26
26
 
27
- def reset!
28
- end
27
+ def reset!; end
29
28
  end
30
29
 
31
30
  class NullDecrypter < Decrypter
@@ -35,8 +34,7 @@ module Zip
35
34
  data
36
35
  end
37
36
 
38
- def reset!(header)
39
- end
37
+ def reset!(_header); end
40
38
  end
41
39
  end
42
40