rubyzip 1.2.3 → 2.2.0

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 (94) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +64 -23
  3. data/lib/zip.rb +5 -3
  4. data/lib/zip/constants.rb +52 -0
  5. data/lib/zip/crypto/decrypted_io.rb +39 -0
  6. data/lib/zip/decompressor.rb +19 -1
  7. data/lib/zip/dos_time.rb +5 -0
  8. data/lib/zip/entry.rb +34 -10
  9. data/lib/zip/errors.rb +2 -0
  10. data/lib/zip/extra_field/generic.rb +1 -1
  11. data/lib/zip/extra_field/universal_time.rb +39 -12
  12. data/lib/zip/file.rb +68 -34
  13. data/lib/zip/inflater.rb +22 -36
  14. data/lib/zip/input_stream.rb +28 -24
  15. data/lib/zip/ioextras/abstract_input_stream.rb +6 -0
  16. data/lib/zip/null_decompressor.rb +1 -9
  17. data/lib/zip/pass_thru_decompressor.rb +13 -22
  18. data/lib/zip/streamable_stream.rb +1 -6
  19. data/lib/zip/version.rb +1 -1
  20. metadata +12 -154
  21. data/test/basic_zip_file_test.rb +0 -60
  22. data/test/case_sensitivity_test.rb +0 -69
  23. data/test/central_directory_entry_test.rb +0 -69
  24. data/test/central_directory_test.rb +0 -100
  25. data/test/crypto/null_encryption_test.rb +0 -57
  26. data/test/crypto/traditional_encryption_test.rb +0 -80
  27. data/test/data/WarnInvalidDate.zip +0 -0
  28. data/test/data/file1.txt +0 -46
  29. data/test/data/file1.txt.deflatedData +0 -0
  30. data/test/data/file2.txt +0 -1504
  31. data/test/data/globTest.zip +0 -0
  32. data/test/data/globTest/foo.txt +0 -0
  33. data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
  34. data/test/data/globTest/food.txt +0 -0
  35. data/test/data/gpbit3stored.zip +0 -0
  36. data/test/data/mimetype +0 -1
  37. data/test/data/notzippedruby.rb +0 -7
  38. data/test/data/ntfs.zip +0 -0
  39. data/test/data/oddExtraField.zip +0 -0
  40. data/test/data/path_traversal/Makefile +0 -10
  41. data/test/data/path_traversal/jwilk/README.md +0 -5
  42. data/test/data/path_traversal/jwilk/absolute1.zip +0 -0
  43. data/test/data/path_traversal/jwilk/absolute2.zip +0 -0
  44. data/test/data/path_traversal/jwilk/dirsymlink.zip +0 -0
  45. data/test/data/path_traversal/jwilk/dirsymlink2a.zip +0 -0
  46. data/test/data/path_traversal/jwilk/dirsymlink2b.zip +0 -0
  47. data/test/data/path_traversal/jwilk/relative0.zip +0 -0
  48. data/test/data/path_traversal/jwilk/relative2.zip +0 -0
  49. data/test/data/path_traversal/jwilk/symlink.zip +0 -0
  50. data/test/data/path_traversal/relative1.zip +0 -0
  51. data/test/data/path_traversal/tilde.zip +0 -0
  52. data/test/data/path_traversal/tuzovakaoff/README.md +0 -3
  53. data/test/data/path_traversal/tuzovakaoff/absolutepath.zip +0 -0
  54. data/test/data/path_traversal/tuzovakaoff/symlink.zip +0 -0
  55. data/test/data/rubycode.zip +0 -0
  56. data/test/data/rubycode2.zip +0 -0
  57. data/test/data/test.xls +0 -0
  58. data/test/data/testDirectory.bin +0 -0
  59. data/test/data/zip64-sample.zip +0 -0
  60. data/test/data/zipWithDirs.zip +0 -0
  61. data/test/data/zipWithEncryption.zip +0 -0
  62. data/test/deflater_test.rb +0 -65
  63. data/test/encryption_test.rb +0 -42
  64. data/test/entry_set_test.rb +0 -163
  65. data/test/entry_test.rb +0 -154
  66. data/test/errors_test.rb +0 -35
  67. data/test/extra_field_test.rb +0 -76
  68. data/test/file_extract_directory_test.rb +0 -54
  69. data/test/file_extract_test.rb +0 -83
  70. data/test/file_permissions_test.rb +0 -65
  71. data/test/file_split_test.rb +0 -57
  72. data/test/file_test.rb +0 -601
  73. data/test/filesystem/dir_iterator_test.rb +0 -58
  74. data/test/filesystem/directory_test.rb +0 -139
  75. data/test/filesystem/file_mutating_test.rb +0 -87
  76. data/test/filesystem/file_nonmutating_test.rb +0 -508
  77. data/test/filesystem/file_stat_test.rb +0 -64
  78. data/test/gentestfiles.rb +0 -126
  79. data/test/inflater_test.rb +0 -14
  80. data/test/input_stream_test.rb +0 -182
  81. data/test/ioextras/abstract_input_stream_test.rb +0 -102
  82. data/test/ioextras/abstract_output_stream_test.rb +0 -106
  83. data/test/ioextras/fake_io_test.rb +0 -18
  84. data/test/local_entry_test.rb +0 -154
  85. data/test/output_stream_test.rb +0 -128
  86. data/test/pass_thru_compressor_test.rb +0 -30
  87. data/test/pass_thru_decompressor_test.rb +0 -14
  88. data/test/path_traversal_test.rb +0 -141
  89. data/test/samples/example_recursive_test.rb +0 -37
  90. data/test/settings_test.rb +0 -95
  91. data/test/test_helper.rb +0 -234
  92. data/test/unicode_file_names_and_comments_test.rb +0 -62
  93. data/test/zip64_full_test.rb +0 -51
  94. data/test/zip64_support_test.rb +0 -14
@@ -1,62 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'test_helper'
4
-
5
- class ZipUnicodeFileNamesAndComments < MiniTest::Test
6
- FILENAME = File.join(File.dirname(__FILE__), 'test1.zip')
7
-
8
- def test_unicode_file_name
9
- file_entrys = ['текстовыйфайл.txt', 'Résumé.txt', '슬레이어스휘.txt']
10
- directory_entrys = ['папка/текстовыйфайл.txt', 'Résumé/Résumé.txt', '슬레이어스휘/슬레이어스휘.txt']
11
- stream = ::Zip::OutputStream.open(FILENAME) do |io|
12
- file_entrys.each do |filename|
13
- io.put_next_entry(filename)
14
- io.write(filename)
15
- end
16
- directory_entrys.each do |filepath|
17
- io.put_next_entry(filepath)
18
- io.write(filepath)
19
- end
20
- end
21
- assert(!stream.nil?)
22
- ::Zip::InputStream.open(FILENAME) do |io|
23
- file_entrys.each do |filename|
24
- entry = io.get_next_entry
25
- entry_name = entry.name
26
- entry_name = entry_name.force_encoding('UTF-8')
27
- assert(filename == entry_name)
28
- end
29
- directory_entrys.each do |filepath|
30
- entry = io.get_next_entry
31
- entry_name = entry.name
32
- entry_name = entry_name.force_encoding('UTF-8')
33
- assert(filepath == entry_name)
34
- end
35
- end
36
-
37
- ::Zip.force_entry_names_encoding = 'UTF-8'
38
- ::Zip::File.open(FILENAME) do |zip|
39
- file_entrys.each do |filename|
40
- refute_nil(zip.find_entry(filename))
41
- end
42
- directory_entrys.each do |filepath|
43
- refute_nil(zip.find_entry(filepath))
44
- end
45
- end
46
- ::Zip.force_entry_names_encoding = nil
47
-
48
- ::File.unlink(FILENAME)
49
- end
50
-
51
- def test_unicode_comment
52
- str = '渠道升级'
53
- ::Zip::File.open(FILENAME, Zip::File::CREATE) do |z|
54
- z.comment = str
55
- end
56
-
57
- ::Zip::File.open(FILENAME) do |z|
58
- assert(z.comment.force_encoding('UTF-8') == str)
59
- end
60
- ::File.unlink(FILENAME)
61
- end
62
- end
@@ -1,51 +0,0 @@
1
- if ENV['FULL_ZIP64_TEST']
2
- require 'minitest/autorun'
3
- require 'minitest/unit'
4
- require 'fileutils'
5
- require 'zip'
6
-
7
- # test zip64 support for real, by actually exceeding the 32-bit size/offset limits
8
- # this test does not, of course, run with the normal unit tests! ;)
9
-
10
- class Zip64FullTest < MiniTest::Test
11
- def teardown
12
- ::Zip.reset!
13
- end
14
-
15
- def prepare_test_file(test_filename)
16
- ::File.delete(test_filename) if ::File.exist?(test_filename)
17
- test_filename
18
- end
19
-
20
- def test_large_zip_file
21
- ::Zip.write_zip64_support = true
22
- first_text = 'starting out small'
23
- last_text = 'this tests files starting after 4GB in the archive'
24
- test_filename = prepare_test_file('huge.zip')
25
- ::Zip::OutputStream.open(test_filename) do |io|
26
- io.put_next_entry('first_file.txt')
27
- io.write(first_text)
28
-
29
- # write just over 4GB (stored, so the zip file exceeds 4GB)
30
- buf = 'blah' * 16_384
31
- io.put_next_entry('huge_file', nil, nil, ::Zip::Entry::STORED)
32
- 65_537.times { io.write(buf) }
33
-
34
- io.put_next_entry('last_file.txt')
35
- io.write(last_text)
36
- end
37
-
38
- ::Zip::File.open(test_filename) do |zf|
39
- assert_equal %w[first_file.txt huge_file last_file.txt], zf.entries.map(&:name)
40
- assert_equal first_text, zf.read('first_file.txt')
41
- assert_equal last_text, zf.read('last_file.txt')
42
- end
43
-
44
- # note: if this fails, be sure you have UnZip version 6.0 or newer
45
- # as this is the first version to support zip64 extensions
46
- # but some OSes (*cough* OSX) still bundle a 5.xx release
47
- assert system("unzip -tqq #{test_filename}"), 'third-party zip validation failed'
48
- end
49
- end
50
-
51
- end
@@ -1,14 +0,0 @@
1
- require 'test_helper'
2
-
3
- class Zip64SupportTest < MiniTest::Test
4
- TEST_FILE = File.join(File.dirname(__FILE__), 'data', 'zip64-sample.zip')
5
-
6
- def test_open_zip64_file
7
- zip_file = ::Zip::File.open(TEST_FILE)
8
- assert(!zip_file.nil?)
9
- assert(zip_file.entries.count == 2)
10
- test_rb = zip_file.entries.find { |x| x.name == 'test.rb' }
11
- assert(test_rb.size == 482)
12
- assert(test_rb.compressed_size == 229)
13
- end
14
- end