rubyzip 1.1.7 → 2.3.2

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.
Files changed (101) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +137 -54
  3. data/Rakefile +6 -4
  4. data/lib/zip/central_directory.rb +17 -13
  5. data/lib/zip/compressor.rb +1 -2
  6. data/lib/zip/constants.rb +57 -5
  7. data/lib/zip/crypto/decrypted_io.rb +40 -0
  8. data/lib/zip/crypto/null_encryption.rb +4 -6
  9. data/lib/zip/crypto/traditional_encryption.rb +14 -14
  10. data/lib/zip/decompressor.rb +22 -4
  11. data/lib/zip/deflater.rb +8 -6
  12. data/lib/zip/dos_time.rb +17 -13
  13. data/lib/zip/entry.rb +171 -148
  14. data/lib/zip/entry_set.rb +16 -14
  15. data/lib/zip/errors.rb +3 -0
  16. data/lib/zip/extra_field/generic.rb +14 -13
  17. data/lib/zip/extra_field/ntfs.rb +18 -16
  18. data/lib/zip/extra_field/old_unix.rb +12 -11
  19. data/lib/zip/extra_field/universal_time.rb +46 -16
  20. data/lib/zip/extra_field/unix.rb +10 -9
  21. data/lib/zip/extra_field/zip64.rb +15 -12
  22. data/lib/zip/extra_field/zip64_placeholder.rb +1 -2
  23. data/lib/zip/extra_field.rb +18 -16
  24. data/lib/zip/file.rb +147 -115
  25. data/lib/zip/filesystem.rb +289 -272
  26. data/lib/zip/inflater.rb +24 -36
  27. data/lib/zip/input_stream.rb +44 -28
  28. data/lib/zip/ioextras/abstract_input_stream.rb +24 -17
  29. data/lib/zip/ioextras/abstract_output_stream.rb +4 -6
  30. data/lib/zip/ioextras.rb +2 -4
  31. data/lib/zip/null_compressor.rb +2 -2
  32. data/lib/zip/null_decompressor.rb +3 -11
  33. data/lib/zip/null_input_stream.rb +0 -0
  34. data/lib/zip/output_stream.rb +25 -17
  35. data/lib/zip/pass_thru_compressor.rb +6 -6
  36. data/lib/zip/pass_thru_decompressor.rb +14 -24
  37. data/lib/zip/streamable_directory.rb +3 -3
  38. data/lib/zip/streamable_stream.rb +7 -11
  39. data/lib/zip/version.rb +1 -1
  40. data/lib/zip.rb +15 -6
  41. data/samples/example.rb +29 -39
  42. data/samples/example_filesystem.rb +16 -18
  43. data/samples/example_recursive.rb +31 -25
  44. data/samples/gtk_ruby_zip.rb +84 -0
  45. data/samples/qtzip.rb +23 -32
  46. data/samples/write_simple.rb +10 -13
  47. data/samples/zipfind.rb +33 -40
  48. metadata +50 -141
  49. data/samples/gtkRubyzip.rb +0 -86
  50. data/test/basic_zip_file_test.rb +0 -64
  51. data/test/central_directory_entry_test.rb +0 -73
  52. data/test/central_directory_test.rb +0 -104
  53. data/test/crypto/null_encryption_test.rb +0 -53
  54. data/test/crypto/traditional_encryption_test.rb +0 -80
  55. data/test/data/WarnInvalidDate.zip +0 -0
  56. data/test/data/file1.txt +0 -46
  57. data/test/data/file1.txt.deflatedData +0 -0
  58. data/test/data/file2.txt +0 -1504
  59. data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
  60. data/test/data/globTest/foo.txt +0 -0
  61. data/test/data/globTest/food.txt +0 -0
  62. data/test/data/globTest.zip +0 -0
  63. data/test/data/mimetype +0 -1
  64. data/test/data/notzippedruby.rb +0 -7
  65. data/test/data/ntfs.zip +0 -0
  66. data/test/data/rubycode.zip +0 -0
  67. data/test/data/rubycode2.zip +0 -0
  68. data/test/data/testDirectory.bin +0 -0
  69. data/test/data/zip64-sample.zip +0 -0
  70. data/test/data/zipWithDirs.zip +0 -0
  71. data/test/data/zipWithEncryption.zip +0 -0
  72. data/test/deflater_test.rb +0 -67
  73. data/test/encryption_test.rb +0 -42
  74. data/test/entry_set_test.rb +0 -138
  75. data/test/entry_test.rb +0 -165
  76. data/test/errors_test.rb +0 -36
  77. data/test/extra_field_test.rb +0 -78
  78. data/test/file_extract_directory_test.rb +0 -56
  79. data/test/file_extract_test.rb +0 -90
  80. data/test/file_split_test.rb +0 -60
  81. data/test/file_test.rb +0 -559
  82. data/test/filesystem/dir_iterator_test.rb +0 -62
  83. data/test/filesystem/directory_test.rb +0 -131
  84. data/test/filesystem/file_mutating_test.rb +0 -100
  85. data/test/filesystem/file_nonmutating_test.rb +0 -514
  86. data/test/filesystem/file_stat_test.rb +0 -66
  87. data/test/gentestfiles.rb +0 -134
  88. data/test/inflater_test.rb +0 -14
  89. data/test/input_stream_test.rb +0 -170
  90. data/test/ioextras/abstract_input_stream_test.rb +0 -103
  91. data/test/ioextras/abstract_output_stream_test.rb +0 -106
  92. data/test/ioextras/fake_io_test.rb +0 -18
  93. data/test/local_entry_test.rb +0 -156
  94. data/test/output_stream_test.rb +0 -129
  95. data/test/pass_thru_compressor_test.rb +0 -31
  96. data/test/pass_thru_decompressor_test.rb +0 -15
  97. data/test/settings_test.rb +0 -92
  98. data/test/test_helper.rb +0 -228
  99. data/test/unicode_file_names_and_comments_test.rb +0 -52
  100. data/test/zip64_full_test.rb +0 -53
  101. data/test/zip64_support_test.rb +0 -15
@@ -1,104 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ZipCentralDirectoryTest < MiniTest::Test
4
-
5
- def teardown
6
- ::Zip.reset!
7
- end
8
-
9
- def test_read_from_stream
10
- ::File.open(TestZipFile::TEST_ZIP2.zip_name, "rb") {
11
- |zipFile|
12
- cdir = ::Zip::CentralDirectory.read_from_stream(zipFile)
13
-
14
- assert_equal(TestZipFile::TEST_ZIP2.entry_names.size, cdir.size)
15
- assert(cdir.entries.sort.compare_enumerables(TestZipFile::TEST_ZIP2.entry_names.sort) {
16
- |cdirEntry, testEntryName|
17
- cdirEntry.name == testEntryName
18
- })
19
- assert_equal(TestZipFile::TEST_ZIP2.comment, cdir.comment)
20
- }
21
- end
22
-
23
- def test_readFromInvalidStream
24
- File.open("test/data/file2.txt", "rb") {
25
- |zipFile|
26
- cdir = ::Zip::CentralDirectory.new
27
- cdir.read_from_stream(zipFile)
28
- }
29
- fail "ZipError expected!"
30
- rescue ::Zip::Error
31
- end
32
-
33
- def test_ReadFromTruncatedZipFile
34
- fragment=""
35
- File.open("test/data/testDirectory.bin", "rb") { |f| fragment = f.read }
36
- fragment.slice!(12) # removed part of first cdir entry. eocd structure still complete
37
- fragment.extend(IOizeString)
38
- entry = ::Zip::CentralDirectory.new
39
- entry.read_from_stream(fragment)
40
- fail "ZipError expected"
41
- rescue ::Zip::Error
42
- end
43
-
44
- def test_write_to_stream
45
- entries = [::Zip::Entry.new("file.zip", "flimse", "myComment", "somethingExtra"),
46
- ::Zip::Entry.new("file.zip", "secondEntryName"),
47
- ::Zip::Entry.new("file.zip", "lastEntry.txt", "Has a comment too")]
48
- cdir = ::Zip::CentralDirectory.new(entries, "my zip comment")
49
- File.open("test/data/generated/cdirtest.bin", "wb") { |f| cdir.write_to_stream(f) }
50
- cdirReadback = ::Zip::CentralDirectory.new
51
- File.open("test/data/generated/cdirtest.bin", "rb") { |f| cdirReadback.read_from_stream(f) }
52
-
53
- assert_equal(cdir.entries.sort, cdirReadback.entries.sort)
54
- end
55
-
56
- def test_write64_to_stream
57
- ::Zip.write_zip64_support = true
58
- entries = [::Zip::Entry.new("file.zip", "file1-little", "comment1", "", 200, 101, ::Zip::Entry::STORED, 200),
59
- ::Zip::Entry.new("file.zip", "file2-big", "comment2", "", 18000000000, 102, ::Zip::Entry::DEFLATED, 20000000000),
60
- ::Zip::Entry.new("file.zip", "file3-alsobig", "comment3", "", 15000000000, 103, ::Zip::Entry::DEFLATED, 21000000000),
61
- ::Zip::Entry.new("file.zip", "file4-little", "comment4", "", 100, 104, ::Zip::Entry::DEFLATED, 121)]
62
- [0, 250, 18000000300, 33000000350].each_with_index do |offset, index|
63
- entries[index].local_header_offset = offset
64
- end
65
- cdir = ::Zip::CentralDirectory.new(entries, "zip comment")
66
- File.open("test/data/generated/cdir64test.bin", "wb") { |f| cdir.write_to_stream(f) }
67
- cdirReadback = ::Zip::CentralDirectory.new
68
- File.open("test/data/generated/cdir64test.bin", "rb") { |f| cdirReadback.read_from_stream(f) }
69
-
70
- assert_equal(cdir.entries.sort, cdirReadback.entries.sort)
71
- assert_equal(::Zip::VERSION_NEEDED_TO_EXTRACT_ZIP64, cdirReadback.instance_variable_get(:@version_needed_for_extract))
72
- end
73
-
74
- def test_equality
75
- cdir1 = ::Zip::CentralDirectory.new([::Zip::Entry.new("file.zip", "flimse", nil,
76
- "somethingExtra"),
77
- ::Zip::Entry.new("file.zip", "secondEntryName"),
78
- ::Zip::Entry.new("file.zip", "lastEntry.txt")],
79
- "my zip comment")
80
- cdir2 = ::Zip::CentralDirectory.new([::Zip::Entry.new("file.zip", "flimse", nil,
81
- "somethingExtra"),
82
- ::Zip::Entry.new("file.zip", "secondEntryName"),
83
- ::Zip::Entry.new("file.zip", "lastEntry.txt")],
84
- "my zip comment")
85
- cdir3 = ::Zip::CentralDirectory.new([::Zip::Entry.new("file.zip", "flimse", nil,
86
- "somethingExtra"),
87
- ::Zip::Entry.new("file.zip", "secondEntryName"),
88
- ::Zip::Entry.new("file.zip", "lastEntry.txt")],
89
- "comment?")
90
- cdir4 = ::Zip::CentralDirectory.new([::Zip::Entry.new("file.zip", "flimse", nil,
91
- "somethingExtra"),
92
- ::Zip::Entry.new("file.zip", "lastEntry.txt")],
93
- "comment?")
94
- assert_equal(cdir1, cdir1)
95
- assert_equal(cdir1, cdir2)
96
-
97
- assert(cdir1 != cdir3)
98
- assert(cdir2 != cdir3)
99
- assert(cdir2 != cdir3)
100
- assert(cdir3 != cdir4)
101
-
102
- assert(cdir3 != "hello")
103
- end
104
- end
@@ -1,53 +0,0 @@
1
- require 'test_helper'
2
-
3
- class NullEncrypterTest < MiniTest::Test
4
- def setup
5
- @encrypter = ::Zip::NullEncrypter.new
6
- end
7
-
8
- def test_header_bytesize
9
- assert_equal 0, @encrypter.header_bytesize
10
- end
11
-
12
- def test_gp_flags
13
- assert_equal 0, @encrypter.gp_flags
14
- end
15
-
16
- def test_header
17
- assert_empty @encrypter.header(nil)
18
- end
19
-
20
- def test_encrypt
21
- [nil, '', 'a' * 10, 0xffffffff].each do |data|
22
- assert_equal data, @encrypter.encrypt(data)
23
- end
24
- end
25
-
26
- def test_reset!
27
- assert_respond_to @encrypter, :reset!
28
- end
29
- end
30
-
31
- class NullDecrypterTest < MiniTest::Test
32
- def setup
33
- @decrypter = ::Zip::NullDecrypter.new
34
- end
35
-
36
- def test_header_bytesize
37
- assert_equal 0, @decrypter.header_bytesize
38
- end
39
-
40
- def test_gp_flags
41
- assert_equal 0, @decrypter.gp_flags
42
- end
43
-
44
- def test_decrypt
45
- [nil, '', 'a' * 10, 0xffffffff].each do |data|
46
- assert_equal data, @decrypter.decrypt(data)
47
- end
48
- end
49
-
50
- def test_reset!
51
- assert_respond_to @decrypter, :reset!
52
- end
53
- end
@@ -1,80 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TraditionalEncrypterTest < MiniTest::Test
4
- def setup
5
- @mtime = ::Zip::DOSTime.new(2014, 12, 17, 15, 56, 24)
6
- @encrypter = ::Zip::TraditionalEncrypter.new('password')
7
- end
8
-
9
- def test_header_bytesize
10
- assert_equal 12, @encrypter.header_bytesize
11
- end
12
-
13
- def test_gp_flags
14
- assert_equal 9, @encrypter.gp_flags
15
- end
16
-
17
- def test_header
18
- @encrypter.reset!
19
- exepected = [239, 57, 234, 154, 246, 80, 83, 221, 74, 200, 121, 91].pack("C*")
20
- Random.stub(:rand, 1) do
21
- assert_equal exepected, @encrypter.header(@mtime)
22
- end
23
- end
24
-
25
- def test_encrypt
26
- @encrypter.reset!
27
- Random.stub(:rand, 1) { @encrypter.header(@mtime) }
28
- assert_raises(NoMethodError) { @encrypter.encrypt(nil) }
29
- assert_raises(NoMethodError) { @encrypter.encrypt(1) }
30
- assert_equal '', @encrypter.encrypt('')
31
- assert_equal [100, 218, 7, 114, 226, 82, 62, 93, 224, 62].pack("C*"), @encrypter.encrypt('a' * 10)
32
- end
33
-
34
- def test_reset!
35
- @encrypter.reset!
36
- Random.stub(:rand, 1) { @encrypter.header(@mtime) }
37
- [100, 218, 7, 114, 226, 82, 62, 93, 224, 62].map(&:chr).each do |c|
38
- assert_equal c, @encrypter.encrypt('a')
39
- end
40
- assert_equal 56.chr, @encrypter.encrypt('a')
41
- @encrypter.reset!
42
- Random.stub(:rand, 1) { @encrypter.header(@mtime) }
43
- [100, 218, 7, 114, 226, 82, 62, 93, 224, 62].map(&:chr).each do |c|
44
- assert_equal c, @encrypter.encrypt('a')
45
- end
46
- end
47
- end
48
-
49
- class TraditionalDecrypterTest < MiniTest::Test
50
- def setup
51
- @decrypter = ::Zip::TraditionalDecrypter.new('password')
52
- end
53
-
54
- def test_header_bytesize
55
- assert_equal 12, @decrypter.header_bytesize
56
- end
57
-
58
- def test_gp_flags
59
- assert_equal 9, @decrypter.gp_flags
60
- end
61
-
62
- def test_decrypt
63
- @decrypter.reset!([239, 57, 234, 154, 246, 80, 83, 221, 74, 200, 121, 91].pack("C*"))
64
- [100, 218, 7, 114, 226, 82, 62, 93, 224, 62].map(&:chr).each do |c|
65
- assert_equal 'a', @decrypter.decrypt(c)
66
- end
67
- end
68
-
69
- def test_reset!
70
- @decrypter.reset!([239, 57, 234, 154, 246, 80, 83, 221, 74, 200, 121, 91].pack("C*"))
71
- [100, 218, 7, 114, 226, 82, 62, 93, 224, 62].map(&:chr).each do |c|
72
- assert_equal 'a', @decrypter.decrypt(c)
73
- end
74
- assert_equal 91.chr, @decrypter.decrypt(2.chr)
75
- @decrypter.reset!([239, 57, 234, 154, 246, 80, 83, 221, 74, 200, 121, 91].pack("C*"))
76
- [100, 218, 7, 114, 226, 82, 62, 93, 224, 62].map(&:chr).each do |c|
77
- assert_equal 'a', @decrypter.decrypt(c)
78
- end
79
- end
80
- end
Binary file
data/test/data/file1.txt DELETED
@@ -1,46 +0,0 @@
1
-
2
- AUTOMAKE_OPTIONS = gnu
3
-
4
- EXTRA_DIST = test.zip
5
-
6
- CXXFLAGS= -g
7
-
8
- noinst_LIBRARIES = libzipios.a
9
-
10
- bin_PROGRAMS = test_zip test_izipfilt test_izipstream
11
- # test_flist
12
-
13
- libzipios_a_SOURCES = backbuffer.h fcol.cpp fcol.h \
14
- fcol_common.h fcolexceptions.cpp fcolexceptions.h \
15
- fileentry.cpp fileentry.h flist.cpp \
16
- flist.h flistentry.cpp flistentry.h \
17
- flistscanner.h ifiltstreambuf.cpp ifiltstreambuf.h \
18
- inflatefilt.cpp inflatefilt.h izipfilt.cpp \
19
- izipfilt.h izipstream.cpp izipstream.h \
20
- zipfile.cpp zipfile.h ziphead.cpp \
21
- ziphead.h flistscanner.ll
22
-
23
- # test_flist_SOURCES = test_flist.cpp
24
-
25
- test_izipfilt_SOURCES = test_izipfilt.cpp
26
-
27
- test_izipstream_SOURCES = test_izipstream.cpp
28
-
29
- test_zip_SOURCES = test_zip.cpp
30
-
31
- # Notice that libzipios.a is not specified as -L. -lzipios
32
- # If it was, automake would not include it as a dependency.
33
-
34
- # test_flist_LDADD = libzipios.a
35
-
36
- test_izipfilt_LDADD = libzipios.a -lz
37
-
38
- test_zip_LDADD = libzipios.a -lz
39
-
40
- test_izipstream_LDADD = libzipios.a -lz
41
-
42
-
43
-
44
- flistscanner.cc : flistscanner.ll
45
- $(LEX) -+ -PFListScanner -o$@ $^
46
-
Binary file