rubyzip 1.3.0 → 2.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -8
  3. data/Rakefile +3 -0
  4. data/lib/zip/central_directory.rb +9 -5
  5. data/lib/zip/constants.rb +52 -0
  6. data/lib/zip/crypto/decrypted_io.rb +40 -0
  7. data/lib/zip/crypto/traditional_encryption.rb +9 -9
  8. data/lib/zip/decompressor.rb +19 -1
  9. data/lib/zip/dos_time.rb +12 -7
  10. data/lib/zip/entry.rb +57 -38
  11. data/lib/zip/entry_set.rb +2 -0
  12. data/lib/zip/errors.rb +1 -0
  13. data/lib/zip/extra_field/generic.rb +10 -9
  14. data/lib/zip/extra_field/ntfs.rb +4 -0
  15. data/lib/zip/extra_field/old_unix.rb +3 -1
  16. data/lib/zip/extra_field/universal_time.rb +42 -12
  17. data/lib/zip/extra_field/unix.rb +3 -1
  18. data/lib/zip/extra_field/zip64.rb +4 -2
  19. data/lib/zip/extra_field.rb +11 -9
  20. data/lib/zip/file.rb +79 -54
  21. data/lib/zip/filesystem.rb +193 -177
  22. data/lib/zip/inflater.rb +24 -36
  23. data/lib/zip/input_stream.rb +33 -26
  24. data/lib/zip/ioextras/abstract_input_stream.rb +19 -8
  25. data/lib/zip/ioextras/abstract_output_stream.rb +1 -1
  26. data/lib/zip/ioextras.rb +1 -1
  27. data/lib/zip/null_decompressor.rb +1 -9
  28. data/lib/zip/output_stream.rb +14 -5
  29. data/lib/zip/pass_thru_compressor.rb +2 -2
  30. data/lib/zip/pass_thru_decompressor.rb +13 -22
  31. data/lib/zip/streamable_directory.rb +3 -3
  32. data/lib/zip/streamable_stream.rb +6 -10
  33. data/lib/zip/version.rb +1 -1
  34. data/lib/zip.rb +4 -3
  35. data/samples/example.rb +2 -2
  36. data/samples/example_filesystem.rb +1 -1
  37. data/samples/gtk_ruby_zip.rb +19 -19
  38. data/samples/qtzip.rb +6 -6
  39. data/samples/write_simple.rb +2 -4
  40. data/samples/zipfind.rb +23 -22
  41. metadata +46 -171
  42. data/test/basic_zip_file_test.rb +0 -60
  43. data/test/case_sensitivity_test.rb +0 -69
  44. data/test/central_directory_entry_test.rb +0 -69
  45. data/test/central_directory_test.rb +0 -100
  46. data/test/crypto/null_encryption_test.rb +0 -57
  47. data/test/crypto/traditional_encryption_test.rb +0 -80
  48. data/test/data/WarnInvalidDate.zip +0 -0
  49. data/test/data/file1.txt +0 -46
  50. data/test/data/file1.txt.deflatedData +0 -0
  51. data/test/data/file2.txt +0 -1504
  52. data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
  53. data/test/data/globTest/foo.txt +0 -0
  54. data/test/data/globTest/food.txt +0 -0
  55. data/test/data/globTest.zip +0 -0
  56. data/test/data/gpbit3stored.zip +0 -0
  57. data/test/data/mimetype +0 -1
  58. data/test/data/notzippedruby.rb +0 -7
  59. data/test/data/ntfs.zip +0 -0
  60. data/test/data/oddExtraField.zip +0 -0
  61. data/test/data/path_traversal/Makefile +0 -10
  62. data/test/data/path_traversal/jwilk/README.md +0 -5
  63. data/test/data/path_traversal/jwilk/absolute1.zip +0 -0
  64. data/test/data/path_traversal/jwilk/absolute2.zip +0 -0
  65. data/test/data/path_traversal/jwilk/dirsymlink.zip +0 -0
  66. data/test/data/path_traversal/jwilk/dirsymlink2a.zip +0 -0
  67. data/test/data/path_traversal/jwilk/dirsymlink2b.zip +0 -0
  68. data/test/data/path_traversal/jwilk/relative0.zip +0 -0
  69. data/test/data/path_traversal/jwilk/relative2.zip +0 -0
  70. data/test/data/path_traversal/jwilk/symlink.zip +0 -0
  71. data/test/data/path_traversal/relative1.zip +0 -0
  72. data/test/data/path_traversal/tilde.zip +0 -0
  73. data/test/data/path_traversal/tuzovakaoff/README.md +0 -3
  74. data/test/data/path_traversal/tuzovakaoff/absolutepath.zip +0 -0
  75. data/test/data/path_traversal/tuzovakaoff/symlink.zip +0 -0
  76. data/test/data/rubycode.zip +0 -0
  77. data/test/data/rubycode2.zip +0 -0
  78. data/test/data/test.xls +0 -0
  79. data/test/data/testDirectory.bin +0 -0
  80. data/test/data/zip64-sample.zip +0 -0
  81. data/test/data/zipWithDirs.zip +0 -0
  82. data/test/data/zipWithEncryption.zip +0 -0
  83. data/test/deflater_test.rb +0 -65
  84. data/test/encryption_test.rb +0 -42
  85. data/test/entry_set_test.rb +0 -163
  86. data/test/entry_test.rb +0 -154
  87. data/test/errors_test.rb +0 -35
  88. data/test/extra_field_test.rb +0 -76
  89. data/test/file_extract_directory_test.rb +0 -54
  90. data/test/file_extract_test.rb +0 -145
  91. data/test/file_permissions_test.rb +0 -65
  92. data/test/file_split_test.rb +0 -57
  93. data/test/file_test.rb +0 -666
  94. data/test/filesystem/dir_iterator_test.rb +0 -58
  95. data/test/filesystem/directory_test.rb +0 -139
  96. data/test/filesystem/file_mutating_test.rb +0 -87
  97. data/test/filesystem/file_nonmutating_test.rb +0 -508
  98. data/test/filesystem/file_stat_test.rb +0 -64
  99. data/test/gentestfiles.rb +0 -126
  100. data/test/inflater_test.rb +0 -14
  101. data/test/input_stream_test.rb +0 -182
  102. data/test/ioextras/abstract_input_stream_test.rb +0 -102
  103. data/test/ioextras/abstract_output_stream_test.rb +0 -106
  104. data/test/ioextras/fake_io_test.rb +0 -18
  105. data/test/local_entry_test.rb +0 -154
  106. data/test/output_stream_test.rb +0 -128
  107. data/test/pass_thru_compressor_test.rb +0 -30
  108. data/test/pass_thru_decompressor_test.rb +0 -14
  109. data/test/path_traversal_test.rb +0 -141
  110. data/test/samples/example_recursive_test.rb +0 -37
  111. data/test/settings_test.rb +0 -95
  112. data/test/test_helper.rb +0 -234
  113. data/test/unicode_file_names_and_comments_test.rb +0 -62
  114. data/test/zip64_full_test.rb +0 -51
  115. data/test/zip64_support_test.rb +0 -14
@@ -1,58 +0,0 @@
1
- require 'test_helper'
2
- require 'zip/filesystem'
3
-
4
- class ZipFsDirIteratorTest < MiniTest::Test
5
- FILENAME_ARRAY = %w[f1 f2 f3 f4 f5 f6]
6
-
7
- def setup
8
- @dirIt = ::Zip::FileSystem::ZipFsDirIterator.new(FILENAME_ARRAY)
9
- end
10
-
11
- def test_close
12
- @dirIt.close
13
- assert_raises(IOError, 'closed directory') do
14
- @dirIt.each { |e| p e }
15
- end
16
- assert_raises(IOError, 'closed directory') do
17
- @dirIt.read
18
- end
19
- assert_raises(IOError, 'closed directory') do
20
- @dirIt.rewind
21
- end
22
- assert_raises(IOError, 'closed directory') do
23
- @dirIt.seek(0)
24
- end
25
- assert_raises(IOError, 'closed directory') do
26
- @dirIt.tell
27
- end
28
- end
29
-
30
- def test_each
31
- # Tested through Enumerable.entries
32
- assert_equal(FILENAME_ARRAY, @dirIt.entries)
33
- end
34
-
35
- def test_read
36
- FILENAME_ARRAY.size.times do |i|
37
- assert_equal(FILENAME_ARRAY[i], @dirIt.read)
38
- end
39
- end
40
-
41
- def test_rewind
42
- @dirIt.read
43
- @dirIt.read
44
- assert_equal(FILENAME_ARRAY[2], @dirIt.read)
45
- @dirIt.rewind
46
- assert_equal(FILENAME_ARRAY[0], @dirIt.read)
47
- end
48
-
49
- def test_tell_seek
50
- @dirIt.read
51
- @dirIt.read
52
- pos = @dirIt.tell
53
- valAtPos = @dirIt.read
54
- @dirIt.read
55
- @dirIt.seek(pos)
56
- assert_equal(valAtPos, @dirIt.read)
57
- end
58
- end
@@ -1,139 +0,0 @@
1
- require 'test_helper'
2
- require 'zip/filesystem'
3
-
4
- class ZipFsDirectoryTest < MiniTest::Test
5
- TEST_ZIP = 'test/data/generated/zipWithDirs_copy.zip'
6
- GLOB_TEST_ZIP = 'test/data/globTest.zip'
7
-
8
- def setup
9
- FileUtils.cp('test/data/zipWithDirs.zip', TEST_ZIP)
10
- end
11
-
12
- def test_delete
13
- ::Zip::File.open(TEST_ZIP) do |zf|
14
- assert_raises(Errno::ENOENT, 'No such file or directory - NoSuchFile.txt') do
15
- zf.dir.delete('NoSuchFile.txt')
16
- end
17
- assert_raises(Errno::EINVAL, 'Invalid argument - file1') do
18
- zf.dir.delete('file1')
19
- end
20
- assert(zf.file.exists?('dir1'))
21
- zf.dir.delete('dir1')
22
- assert(!zf.file.exists?('dir1'))
23
- end
24
- end
25
-
26
- def test_mkdir
27
- ::Zip::File.open(TEST_ZIP) do |zf|
28
- assert_raises(Errno::EEXIST, 'File exists - dir1') do
29
- zf.dir.mkdir('file1')
30
- end
31
- assert_raises(Errno::EEXIST, 'File exists - dir1') do
32
- zf.dir.mkdir('dir1')
33
- end
34
- assert(!zf.file.exists?('newDir'))
35
- zf.dir.mkdir('newDir')
36
- assert(zf.file.directory?('newDir'))
37
- assert(!zf.file.exists?('newDir2'))
38
- zf.dir.mkdir('newDir2', 3485)
39
- assert(zf.file.directory?('newDir2'))
40
- end
41
- end
42
-
43
- def test_pwd_chdir_entries
44
- ::Zip::File.open(TEST_ZIP) do |zf|
45
- assert_equal('/', zf.dir.pwd)
46
-
47
- assert_raises(Errno::ENOENT, 'No such file or directory - no such dir') do
48
- zf.dir.chdir 'no such dir'
49
- end
50
-
51
- assert_raises(Errno::EINVAL, 'Invalid argument - file1') do
52
- zf.dir.chdir 'file1'
53
- end
54
-
55
- assert_equal(%w[dir1 dir2 file1].sort, zf.dir.entries('.').sort)
56
- zf.dir.chdir 'dir1'
57
- assert_equal('/dir1', zf.dir.pwd)
58
- assert_equal(%w[dir11 file11 file12], zf.dir.entries('.').sort)
59
-
60
- zf.dir.chdir '../dir2/dir21'
61
- assert_equal('/dir2/dir21', zf.dir.pwd)
62
- assert_equal(['dir221'].sort, zf.dir.entries('.').sort)
63
- end
64
- end
65
-
66
- def test_foreach
67
- ::Zip::File.open(TEST_ZIP) do |zf|
68
- blockCalled = false
69
- assert_raises(Errno::ENOENT, 'No such file or directory - noSuchDir') do
70
- zf.dir.foreach('noSuchDir') { |_e| blockCalled = true }
71
- end
72
- assert(!blockCalled)
73
-
74
- assert_raises(Errno::ENOTDIR, 'Not a directory - file1') do
75
- zf.dir.foreach('file1') { |_e| blockCalled = true }
76
- end
77
- assert(!blockCalled)
78
-
79
- entries = []
80
- zf.dir.foreach('.') { |e| entries << e }
81
- assert_equal(%w[dir1 dir2 file1].sort, entries.sort)
82
-
83
- entries = []
84
- zf.dir.foreach('dir1') { |e| entries << e }
85
- assert_equal(%w[dir11 file11 file12], entries.sort)
86
- end
87
- end
88
-
89
- def test_chroot
90
- ::Zip::File.open(TEST_ZIP) do |zf|
91
- assert_raises(NotImplementedError) do
92
- zf.dir.chroot
93
- end
94
- end
95
- end
96
-
97
- def test_glob
98
- globbed_files = [
99
- 'globTest/foo/bar/baz/foo.txt',
100
- 'globTest/foo.txt',
101
- 'globTest/food.txt'
102
- ]
103
-
104
- ::Zip::File.open(GLOB_TEST_ZIP) do |zf|
105
- zf.dir.glob('**/*.txt') do |f|
106
- assert globbed_files.include?(f.name)
107
- end
108
-
109
- zf.dir.glob('globTest/foo/**/*.txt') do |f|
110
- assert_equal globbed_files[0], f.name
111
- end
112
-
113
- zf.dir.chdir('globTest/foo')
114
- zf.dir.glob('**/*.txt') do |f|
115
- assert_equal globbed_files[0], f.name
116
- end
117
- end
118
- end
119
-
120
- def test_open_new
121
- ::Zip::File.open(TEST_ZIP) do |zf|
122
- assert_raises(Errno::ENOTDIR, 'Not a directory - file1') do
123
- zf.dir.new('file1')
124
- end
125
-
126
- assert_raises(Errno::ENOENT, 'No such file or directory - noSuchFile') do
127
- zf.dir.new('noSuchFile')
128
- end
129
-
130
- d = zf.dir.new('.')
131
- assert_equal(%w[file1 dir1 dir2].sort, d.entries.sort)
132
- d.close
133
-
134
- zf.dir.open('dir1') do |dir|
135
- assert_equal(%w[dir11 file11 file12].sort, dir.entries.sort)
136
- end
137
- end
138
- end
139
- end
@@ -1,87 +0,0 @@
1
- require 'test_helper'
2
- require 'zip/filesystem'
3
-
4
- class ZipFsFileMutatingTest < MiniTest::Test
5
- TEST_ZIP = 'test/data/generated/zipWithDirs_copy.zip'
6
- def setup
7
- FileUtils.cp('test/data/zipWithDirs.zip', TEST_ZIP)
8
- end
9
-
10
- def teardown; end
11
-
12
- def test_delete
13
- do_test_delete_or_unlink(:delete)
14
- end
15
-
16
- def test_unlink
17
- do_test_delete_or_unlink(:unlink)
18
- end
19
-
20
- def test_open_write
21
- ::Zip::File.open(TEST_ZIP) do |zf|
22
- zf.file.open('test_open_write_entry', 'w') do |f|
23
- f.write "This is what I'm writing"
24
- end
25
- assert_equal("This is what I'm writing",
26
- zf.file.read('test_open_write_entry'))
27
-
28
- # Test with existing entry
29
- zf.file.open('file1', 'wb') do |f| # also check that 'b' option is ignored
30
- f.write "This is what I'm writing too"
31
- end
32
- assert_equal("This is what I'm writing too",
33
- zf.file.read('file1'))
34
- end
35
- end
36
-
37
- def test_rename
38
- ::Zip::File.open(TEST_ZIP) do |zf|
39
- assert_raises(Errno::ENOENT, '') do
40
- zf.file.rename('NoSuchFile', 'bimse')
41
- end
42
- zf.file.rename('file1', 'newNameForFile1')
43
- end
44
-
45
- ::Zip::File.open(TEST_ZIP) do |zf|
46
- assert(!zf.file.exists?('file1'))
47
- assert(zf.file.exists?('newNameForFile1'))
48
- end
49
- end
50
-
51
- def test_chmod
52
- ::Zip::File.open(TEST_ZIP) do |zf|
53
- zf.file.chmod(0o765, 'file1')
54
- end
55
-
56
- ::Zip::File.open(TEST_ZIP) do |zf|
57
- assert_equal(0o100765, zf.file.stat('file1').mode)
58
- end
59
- end
60
-
61
- def do_test_delete_or_unlink(symbol)
62
- ::Zip::File.open(TEST_ZIP) do |zf|
63
- assert(zf.file.exists?('dir2/dir21/dir221/file2221'))
64
- zf.file.send(symbol, 'dir2/dir21/dir221/file2221')
65
- assert(!zf.file.exists?('dir2/dir21/dir221/file2221'))
66
-
67
- assert(zf.file.exists?('dir1/file11'))
68
- assert(zf.file.exists?('dir1/file12'))
69
- zf.file.send(symbol, 'dir1/file11', 'dir1/file12')
70
- assert(!zf.file.exists?('dir1/file11'))
71
- assert(!zf.file.exists?('dir1/file12'))
72
-
73
- assert_raises(Errno::ENOENT) { zf.file.send(symbol, 'noSuchFile') }
74
- assert_raises(Errno::EISDIR) { zf.file.send(symbol, 'dir1/dir11') }
75
- assert_raises(Errno::EISDIR) { zf.file.send(symbol, 'dir1/dir11/') }
76
- end
77
-
78
- ::Zip::File.open(TEST_ZIP) do |zf|
79
- assert(!zf.file.exists?('dir2/dir21/dir221/file2221'))
80
- assert(!zf.file.exists?('dir1/file11'))
81
- assert(!zf.file.exists?('dir1/file12'))
82
-
83
- assert(zf.file.exists?('dir1/dir11'))
84
- assert(zf.file.exists?('dir1/dir11/'))
85
- end
86
- end
87
- end