rubyzip 1.3.0 → 3.0.0.alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Changelog.md +368 -0
- data/README.md +123 -46
- data/Rakefile +13 -6
- data/lib/zip/central_directory.rb +166 -116
- data/lib/zip/compressor.rb +3 -1
- data/lib/zip/constants.rb +77 -21
- data/lib/zip/crypto/decrypted_io.rb +42 -0
- data/lib/zip/crypto/encryption.rb +4 -2
- data/lib/zip/crypto/null_encryption.rb +5 -3
- data/lib/zip/crypto/traditional_encryption.rb +14 -12
- data/lib/zip/decompressor.rb +21 -2
- data/lib/zip/deflater.rb +10 -8
- data/lib/zip/dirtyable.rb +32 -0
- data/lib/zip/dos_time.rb +53 -12
- data/lib/zip/entry.rb +306 -184
- data/lib/zip/entry_set.rb +11 -7
- data/lib/zip/errors.rb +115 -15
- data/lib/zip/extra_field/generic.rb +11 -17
- data/lib/zip/extra_field/ntfs.rb +8 -2
- data/lib/zip/extra_field/old_unix.rb +6 -2
- data/lib/zip/extra_field/universal_time.rb +45 -13
- data/lib/zip/extra_field/unix.rb +7 -3
- data/lib/zip/extra_field/unknown.rb +33 -0
- data/lib/zip/extra_field/zip64.rb +16 -7
- data/lib/zip/extra_field.rb +22 -26
- data/lib/zip/file.rb +196 -240
- data/lib/zip/file_split.rb +97 -0
- data/lib/zip/filesystem/dir.rb +86 -0
- data/lib/zip/filesystem/directory_iterator.rb +48 -0
- data/lib/zip/filesystem/file.rb +262 -0
- data/lib/zip/filesystem/file_stat.rb +110 -0
- data/lib/zip/filesystem/zip_file_name_mapper.rb +81 -0
- data/lib/zip/filesystem.rb +31 -584
- data/lib/zip/inflater.rb +27 -37
- data/lib/zip/input_stream.rb +67 -42
- data/lib/zip/ioextras/abstract_input_stream.rb +32 -16
- data/lib/zip/ioextras/abstract_output_stream.rb +5 -3
- data/lib/zip/ioextras.rb +7 -7
- data/lib/zip/null_compressor.rb +3 -1
- data/lib/zip/null_decompressor.rb +4 -10
- data/lib/zip/null_input_stream.rb +3 -1
- data/lib/zip/output_stream.rb +58 -43
- data/lib/zip/pass_thru_compressor.rb +5 -3
- data/lib/zip/pass_thru_decompressor.rb +16 -23
- data/lib/zip/streamable_directory.rb +6 -4
- data/lib/zip/streamable_stream.rb +9 -10
- data/lib/zip/version.rb +3 -1
- data/lib/zip.rb +19 -4
- data/rubyzip.gemspec +38 -0
- data/samples/example.rb +9 -4
- data/samples/example_filesystem.rb +3 -2
- data/samples/example_recursive.rb +3 -1
- data/samples/gtk_ruby_zip.rb +22 -20
- data/samples/qtzip.rb +12 -11
- data/samples/write_simple.rb +3 -4
- data/samples/zipfind.rb +24 -22
- metadata +86 -179
- data/TODO +0 -15
- data/lib/zip/extra_field/zip64_placeholder.rb +0 -15
- data/test/basic_zip_file_test.rb +0 -60
- data/test/case_sensitivity_test.rb +0 -69
- data/test/central_directory_entry_test.rb +0 -69
- data/test/central_directory_test.rb +0 -100
- data/test/crypto/null_encryption_test.rb +0 -57
- data/test/crypto/traditional_encryption_test.rb +0 -80
- data/test/data/WarnInvalidDate.zip +0 -0
- data/test/data/file1.txt +0 -46
- data/test/data/file1.txt.deflatedData +0 -0
- data/test/data/file2.txt +0 -1504
- data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
- data/test/data/globTest/foo.txt +0 -0
- data/test/data/globTest/food.txt +0 -0
- data/test/data/globTest.zip +0 -0
- data/test/data/gpbit3stored.zip +0 -0
- data/test/data/mimetype +0 -1
- data/test/data/notzippedruby.rb +0 -7
- data/test/data/ntfs.zip +0 -0
- data/test/data/oddExtraField.zip +0 -0
- data/test/data/path_traversal/Makefile +0 -10
- data/test/data/path_traversal/jwilk/README.md +0 -5
- data/test/data/path_traversal/jwilk/absolute1.zip +0 -0
- data/test/data/path_traversal/jwilk/absolute2.zip +0 -0
- data/test/data/path_traversal/jwilk/dirsymlink.zip +0 -0
- data/test/data/path_traversal/jwilk/dirsymlink2a.zip +0 -0
- data/test/data/path_traversal/jwilk/dirsymlink2b.zip +0 -0
- data/test/data/path_traversal/jwilk/relative0.zip +0 -0
- data/test/data/path_traversal/jwilk/relative2.zip +0 -0
- data/test/data/path_traversal/jwilk/symlink.zip +0 -0
- data/test/data/path_traversal/relative1.zip +0 -0
- data/test/data/path_traversal/tilde.zip +0 -0
- data/test/data/path_traversal/tuzovakaoff/README.md +0 -3
- data/test/data/path_traversal/tuzovakaoff/absolutepath.zip +0 -0
- data/test/data/path_traversal/tuzovakaoff/symlink.zip +0 -0
- data/test/data/rubycode.zip +0 -0
- data/test/data/rubycode2.zip +0 -0
- data/test/data/test.xls +0 -0
- data/test/data/testDirectory.bin +0 -0
- data/test/data/zip64-sample.zip +0 -0
- data/test/data/zipWithDirs.zip +0 -0
- data/test/data/zipWithEncryption.zip +0 -0
- data/test/deflater_test.rb +0 -65
- data/test/encryption_test.rb +0 -42
- data/test/entry_set_test.rb +0 -163
- data/test/entry_test.rb +0 -154
- data/test/errors_test.rb +0 -35
- data/test/extra_field_test.rb +0 -76
- data/test/file_extract_directory_test.rb +0 -54
- data/test/file_extract_test.rb +0 -145
- data/test/file_permissions_test.rb +0 -65
- data/test/file_split_test.rb +0 -57
- data/test/file_test.rb +0 -666
- data/test/filesystem/dir_iterator_test.rb +0 -58
- data/test/filesystem/directory_test.rb +0 -139
- data/test/filesystem/file_mutating_test.rb +0 -87
- data/test/filesystem/file_nonmutating_test.rb +0 -508
- data/test/filesystem/file_stat_test.rb +0 -64
- data/test/gentestfiles.rb +0 -126
- data/test/inflater_test.rb +0 -14
- data/test/input_stream_test.rb +0 -182
- data/test/ioextras/abstract_input_stream_test.rb +0 -102
- data/test/ioextras/abstract_output_stream_test.rb +0 -106
- data/test/ioextras/fake_io_test.rb +0 -18
- data/test/local_entry_test.rb +0 -154
- data/test/output_stream_test.rb +0 -128
- data/test/pass_thru_compressor_test.rb +0 -30
- data/test/pass_thru_decompressor_test.rb +0 -14
- data/test/path_traversal_test.rb +0 -141
- data/test/samples/example_recursive_test.rb +0 -37
- data/test/settings_test.rb +0 -95
- data/test/test_helper.rb +0 -234
- data/test/unicode_file_names_and_comments_test.rb +0 -62
- data/test/zip64_full_test.rb +0 -51
- data/test/zip64_support_test.rb +0 -14
data/lib/zip/deflater.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Zip
|
2
|
-
class Deflater < Compressor
|
4
|
+
class Deflater < Compressor # :nodoc:all
|
3
5
|
def initialize(output_stream, level = Zip.default_compression, encrypter = NullEncrypter.new)
|
4
6
|
super()
|
5
7
|
@output_stream = output_stream
|
@@ -13,16 +15,16 @@ module Zip
|
|
13
15
|
val = data.to_s
|
14
16
|
@crc = Zlib.crc32(val, @crc)
|
15
17
|
@size += val.bytesize
|
16
|
-
buffer = @zlib_deflater.deflate(data)
|
17
|
-
if buffer.empty?
|
18
|
-
|
19
|
-
|
20
|
-
@output_stream << @encrypter.encrypt(buffer)
|
21
|
-
end
|
18
|
+
buffer = @zlib_deflater.deflate(data, Zlib::SYNC_FLUSH)
|
19
|
+
return @output_stream if buffer.empty?
|
20
|
+
|
21
|
+
@output_stream << @encrypter.encrypt(buffer)
|
22
22
|
end
|
23
23
|
|
24
24
|
def finish
|
25
|
-
|
25
|
+
buffer = @zlib_deflater.finish
|
26
|
+
@output_stream << @encrypter.encrypt(buffer) unless buffer.empty?
|
27
|
+
@zlib_deflater.close
|
26
28
|
end
|
27
29
|
|
28
30
|
attr_reader :size, :crc
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zip
|
4
|
+
module Dirtyable # :nodoc:all
|
5
|
+
def initialize(dirty_on_create: true)
|
6
|
+
@dirty = dirty_on_create
|
7
|
+
end
|
8
|
+
|
9
|
+
def dirty?
|
10
|
+
@dirty
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods # :nodoc:
|
14
|
+
def mark_dirty(*symbols) # :nodoc:
|
15
|
+
# Move the original method and call it after we've set the dirty flag.
|
16
|
+
symbols.each do |symbol|
|
17
|
+
orig_name = "orig_#{symbol}"
|
18
|
+
alias_method orig_name, symbol
|
19
|
+
|
20
|
+
define_method(symbol) do |param|
|
21
|
+
@dirty = true
|
22
|
+
send(orig_name, param)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.included(base)
|
29
|
+
base.extend(ClassMethods)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/zip/dos_time.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
|
1
5
|
module Zip
|
2
|
-
class DOSTime < Time
|
6
|
+
class DOSTime < Time # :nodoc:all
|
3
7
|
# MS-DOS File Date and Time format as used in Interrupt 21H Function 57H:
|
4
8
|
|
5
9
|
# Register CX, the Time:
|
@@ -24,21 +28,58 @@ module Zip
|
|
24
28
|
((year - 1980) << 9)
|
25
29
|
end
|
26
30
|
|
27
|
-
# Dos time is only stored with two seconds accuracy
|
28
31
|
def dos_equals(other)
|
29
|
-
|
32
|
+
warn 'Zip::DOSTime#dos_equals is deprecated. Use `==` instead.'
|
33
|
+
self == other
|
34
|
+
end
|
35
|
+
|
36
|
+
# Dos time is only stored with two seconds accuracy.
|
37
|
+
def <=>(other)
|
38
|
+
return unless other.kind_of?(Time)
|
39
|
+
|
40
|
+
(to_i / 2) <=> (other.to_i / 2)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Create a DOSTime instance from a vanilla Time instance.
|
44
|
+
def self.from_time(time)
|
45
|
+
local(time.year, time.month, time.day, time.hour, time.min, time.sec)
|
30
46
|
end
|
31
47
|
|
32
|
-
def self.parse_binary_dos_format(
|
33
|
-
second = 2 * (0b11111 &
|
34
|
-
minute = (0b11111100000 &
|
35
|
-
hour = (0b1111100000000000 &
|
36
|
-
day = (0b11111 &
|
37
|
-
month = (0b111100000 &
|
38
|
-
year = ((0b1111111000000000 &
|
39
|
-
|
40
|
-
|
48
|
+
def self.parse_binary_dos_format(bin_dos_date, bin_dos_time)
|
49
|
+
second = 2 * (0b11111 & bin_dos_time)
|
50
|
+
minute = (0b11111100000 & bin_dos_time) >> 5
|
51
|
+
hour = (0b1111100000000000 & bin_dos_time) >> 11
|
52
|
+
day = (0b11111 & bin_dos_date)
|
53
|
+
month = (0b111100000 & bin_dos_date) >> 5
|
54
|
+
year = ((0b1111111000000000 & bin_dos_date) >> 9) + 1980
|
55
|
+
|
56
|
+
local(year, month, day, hour, minute, second)
|
57
|
+
end
|
58
|
+
|
59
|
+
if defined? JRUBY_VERSION && Gem::Version.new(JRUBY_VERSION) < '9.2.18.0'
|
60
|
+
module JRubyCMP # :nodoc:
|
61
|
+
def ==(other)
|
62
|
+
(self <=> other).zero?
|
63
|
+
end
|
64
|
+
|
65
|
+
def <(other)
|
66
|
+
(self <=> other).negative?
|
67
|
+
end
|
68
|
+
|
69
|
+
def <=(other)
|
70
|
+
(self <=> other) <= 0
|
71
|
+
end
|
72
|
+
|
73
|
+
def >(other)
|
74
|
+
(self <=> other).positive?
|
75
|
+
end
|
76
|
+
|
77
|
+
def >=(other)
|
78
|
+
(self <=> other) >= 0
|
79
|
+
end
|
41
80
|
end
|
81
|
+
|
82
|
+
include JRubyCMP
|
42
83
|
end
|
43
84
|
end
|
44
85
|
end
|