rubyzip 1.1.4 → 1.1.5

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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/lib/zip/file.rb +2 -1
  3. data/lib/zip/inflater.rb +15 -44
  4. data/lib/zip/ioextras/abstract_input_stream.rb +5 -1
  5. data/lib/zip/version.rb +1 -1
  6. data/test/alltests.rb +18 -0
  7. data/test/basic_zip_file_test.rb +64 -0
  8. data/test/central_directory_entry_test.rb +73 -0
  9. data/test/central_directory_test.rb +100 -0
  10. data/test/data/file1.txt +46 -0
  11. data/test/data/file1.txt.deflatedData +0 -0
  12. data/test/data/file2.txt +1504 -0
  13. data/test/data/file2.txt.other +0 -0
  14. data/test/data/globTest.zip +0 -0
  15. data/test/data/globTest/foo.txt +0 -0
  16. data/test/data/globTest/foo/bar/baz/foo.txt +0 -0
  17. data/test/data/globTest/food.txt +0 -0
  18. data/test/data/mimetype +1 -0
  19. data/test/data/notzippedruby.rb +7 -0
  20. data/test/data/rubycode.zip +0 -0
  21. data/test/data/rubycode2.zip +0 -0
  22. data/test/data/testDirectory.bin +0 -0
  23. data/test/data/zip64-sample.zip +0 -0
  24. data/test/data/zipWithDirs.zip +0 -0
  25. data/test/deflater_test.rb +62 -0
  26. data/test/dummy.txt +1 -0
  27. data/test/entry_set_test.rb +125 -0
  28. data/test/entry_test.rb +165 -0
  29. data/test/errors_test.rb +36 -0
  30. data/test/extra_field_test.rb +69 -0
  31. data/test/file_extract_directory_test.rb +55 -0
  32. data/test/file_extract_test.rb +90 -0
  33. data/test/file_split_test.rb +60 -0
  34. data/test/file_test.rb +568 -0
  35. data/test/filesystem/dir_iterator_test.rb +62 -0
  36. data/test/filesystem/directory_test.rb +131 -0
  37. data/test/filesystem/file_mutating_test.rb +100 -0
  38. data/test/filesystem/file_nonmutating_test.rb +505 -0
  39. data/test/filesystem/file_stat_test.rb +66 -0
  40. data/test/gentestfiles.rb +134 -0
  41. data/test/inflater_test.rb +14 -0
  42. data/test/input_stream_test.rb +170 -0
  43. data/test/ioextras/abstract_input_stream_test.rb +103 -0
  44. data/test/ioextras/abstract_output_stream_test.rb +106 -0
  45. data/test/ioextras/fake_io_test.rb +18 -0
  46. data/test/ioextrastest.rb +233 -0
  47. data/test/local_entry_test.rb +153 -0
  48. data/test/odt_test_fix.rb +30 -0
  49. data/test/output_stream_test.rb +114 -0
  50. data/test/pass_thru_compressor_test.rb +31 -0
  51. data/test/pass_thru_decompressor_test.rb +15 -0
  52. data/test/sample.odt +0 -0
  53. data/test/settings_test.rb +71 -0
  54. data/test/test_helper.rb +228 -0
  55. data/test/unicode_file_names_and_comments_test.rb +40 -0
  56. data/test/zip64_full_test.rb +49 -0
  57. data/test/zip64_support_test.rb +15 -0
  58. metadata +107 -3
File without changes
Binary file
File without changes
File without changes
File without changes
@@ -0,0 +1 @@
1
+ application/epub+zip
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ class NotZippedRuby
4
+ def returnTrue
5
+ true
6
+ end
7
+ end
Binary file
Binary file
Binary file
@@ -0,0 +1,62 @@
1
+ require 'test_helper'
2
+
3
+ class DeflaterTest < MiniTest::Unit::TestCase
4
+ include CrcTest
5
+
6
+ def test_outputOperator
7
+ txt = load_file("test/data/file2.txt")
8
+ deflate(txt, "deflatertest.bin")
9
+ inflatedTxt = inflate("deflatertest.bin")
10
+ assert_equal(txt, inflatedTxt)
11
+ end
12
+
13
+ def test_default_compression
14
+ txt = load_file("test/data/file2.txt")
15
+
16
+ Zip.default_compression = ::Zlib::BEST_COMPRESSION
17
+ deflate(txt, "compressiontest_best_compression.bin")
18
+ Zip.default_compression = ::Zlib::DEFAULT_COMPRESSION
19
+ deflate(txt, "compressiontest_default_compression.bin")
20
+ Zip.default_compression = ::Zlib::NO_COMPRESSION
21
+ deflate(txt, "compressiontest_no_compression.bin")
22
+
23
+ best = File.size("compressiontest_best_compression.bin")
24
+ default = File.size("compressiontest_default_compression.bin")
25
+ no = File.size("compressiontest_no_compression.bin")
26
+
27
+ assert(best < default)
28
+ assert(best < no)
29
+ assert(default < no)
30
+ end
31
+
32
+
33
+ private
34
+ def load_file(fileName)
35
+ txt = nil
36
+ File.open(fileName, "rb") { |f| txt = f.read }
37
+ end
38
+
39
+ def deflate(data, fileName)
40
+ File.open(fileName, "wb") {
41
+ |file|
42
+ deflater = ::Zip::Deflater.new(file)
43
+ deflater << data
44
+ deflater.finish
45
+ assert_equal(deflater.size, data.size)
46
+ file << "trailing data for zlib with -MAX_WBITS"
47
+ }
48
+ end
49
+
50
+ def inflate(fileName)
51
+ txt = nil
52
+ File.open(fileName, "rb") {
53
+ |file|
54
+ inflater = ::Zip::Inflater.new(file)
55
+ txt = inflater.sysread
56
+ }
57
+ end
58
+
59
+ def test_crc
60
+ run_crc_test(::Zip::Deflater)
61
+ end
62
+ end
@@ -0,0 +1 @@
1
+ hello worldbingo
@@ -0,0 +1,125 @@
1
+ require 'test_helper'
2
+
3
+ class ZipEntrySetTest < MiniTest::Unit::TestCase
4
+ ZIP_ENTRIES = [
5
+ ::Zip::Entry.new("zipfile.zip", "name1", "comment1"),
6
+ ::Zip::Entry.new("zipfile.zip", "name3", "comment1"),
7
+ ::Zip::Entry.new("zipfile.zip", "name2", "comment1"),
8
+ ::Zip::Entry.new("zipfile.zip", "name4", "comment1"),
9
+ ::Zip::Entry.new("zipfile.zip", "name5", "comment1"),
10
+ ::Zip::Entry.new("zipfile.zip", "name6", "comment1")
11
+ ]
12
+
13
+ def setup
14
+ @zipEntrySet = ::Zip::EntrySet.new(ZIP_ENTRIES)
15
+ end
16
+
17
+ def test_include
18
+ assert(@zipEntrySet.include?(ZIP_ENTRIES.first))
19
+ assert(!@zipEntrySet.include?(::Zip::Entry.new("different.zip", "different", "aComment")))
20
+ end
21
+
22
+ def test_size
23
+ assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
24
+ assert_equal(ZIP_ENTRIES.size, @zipEntrySet.length)
25
+ @zipEntrySet << ::Zip::Entry.new("a", "b", "c")
26
+ assert_equal(ZIP_ENTRIES.size + 1, @zipEntrySet.length)
27
+ end
28
+
29
+ def test_add
30
+ zes = ::Zip::EntrySet.new
31
+ entry1 = ::Zip::Entry.new("zf.zip", "name1")
32
+ entry2 = ::Zip::Entry.new("zf.zip", "name2")
33
+ zes << entry1
34
+ assert(zes.include?(entry1))
35
+ zes.push(entry2)
36
+ assert(zes.include?(entry2))
37
+ end
38
+
39
+ def test_delete
40
+ assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
41
+ entry = @zipEntrySet.delete(ZIP_ENTRIES.first)
42
+ assert_equal(ZIP_ENTRIES.size - 1, @zipEntrySet.size)
43
+ assert_equal(ZIP_ENTRIES.first, entry)
44
+
45
+ entry = @zipEntrySet.delete(ZIP_ENTRIES.first)
46
+ assert_equal(ZIP_ENTRIES.size - 1, @zipEntrySet.size)
47
+ assert_nil(entry)
48
+ end
49
+
50
+ def test_each
51
+ # Used each instead each_with_index due the bug in jRuby
52
+ count = 0
53
+ @zipEntrySet.each do |entry|
54
+ assert(ZIP_ENTRIES.include?(entry))
55
+ count += 1
56
+ end
57
+ assert_equal(ZIP_ENTRIES.size, count)
58
+ end
59
+
60
+ def test_entries
61
+ assert_equal(ZIP_ENTRIES, @zipEntrySet.entries)
62
+ end
63
+
64
+ def test_entries_with_sort
65
+ ::Zip.sort_entries = true
66
+ assert_equal(ZIP_ENTRIES.sort, @zipEntrySet.entries)
67
+ ::Zip.sort_entries = false
68
+ assert_equal(ZIP_ENTRIES, @zipEntrySet.entries)
69
+ end
70
+
71
+ def test_compound
72
+ newEntry = ::Zip::Entry.new("zf.zip", "new entry", "new entry's comment")
73
+ assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
74
+ @zipEntrySet << newEntry
75
+ assert_equal(ZIP_ENTRIES.size + 1, @zipEntrySet.size)
76
+ assert(@zipEntrySet.include?(newEntry))
77
+
78
+ @zipEntrySet.delete(newEntry)
79
+ assert_equal(ZIP_ENTRIES.size, @zipEntrySet.size)
80
+ end
81
+
82
+ def test_dup
83
+ copy = @zipEntrySet.dup
84
+ assert_equal(@zipEntrySet, copy)
85
+
86
+ # demonstrate that this is a deep copy
87
+ copy.entries[0].name = "a totally different name"
88
+ assert(@zipEntrySet != copy)
89
+ end
90
+
91
+ def test_parent
92
+ entries = [
93
+ ::Zip::Entry.new("zf.zip", "a/"),
94
+ ::Zip::Entry.new("zf.zip", "a/b/"),
95
+ ::Zip::Entry.new("zf.zip", "a/b/c/")
96
+ ]
97
+ entrySet = ::Zip::EntrySet.new(entries)
98
+
99
+ assert_equal(nil, entrySet.parent(entries[0]))
100
+ assert_equal(entries[0], entrySet.parent(entries[1]))
101
+ assert_equal(entries[1], entrySet.parent(entries[2]))
102
+ end
103
+
104
+ def test_glob
105
+ res = @zipEntrySet.glob('name[2-4]')
106
+ assert_equal(3, res.size)
107
+ assert_equal(ZIP_ENTRIES[1, 3].sort, res.sort)
108
+ end
109
+
110
+ def test_glob2
111
+ entries = [
112
+ ::Zip::Entry.new("zf.zip", "a/"),
113
+ ::Zip::Entry.new("zf.zip", "a/b/b1"),
114
+ ::Zip::Entry.new("zf.zip", "a/b/c/"),
115
+ ::Zip::Entry.new("zf.zip", "a/b/c/c1")
116
+ ]
117
+ entrySet = ::Zip::EntrySet.new(entries)
118
+
119
+ assert_equal(entries[0, 1], entrySet.glob("*"))
120
+ # assert_equal(entries[FIXME], entrySet.glob("**"))
121
+ # res = entrySet.glob('a*')
122
+ # assert_equal(entries.size, res.size)
123
+ # assert_equal(entrySet.map { |e| e.name }, res.map { |e| e.name })
124
+ end
125
+ end
@@ -0,0 +1,165 @@
1
+ require 'test_helper'
2
+
3
+ class ZipEntryTest < MiniTest::Unit::TestCase
4
+ TEST_ZIPFILE = "someZipFile.zip"
5
+ TEST_COMMENT = "a comment"
6
+ TEST_COMPRESSED_SIZE = 1234
7
+ TEST_CRC = 325324
8
+ TEST_EXTRA = "Some data here"
9
+ TEST_COMPRESSIONMETHOD = ::Zip::Entry::DEFLATED
10
+ TEST_NAME = "entry name"
11
+ TEST_SIZE = 8432
12
+ TEST_ISDIRECTORY = false
13
+ TEST_TIME = Time.now
14
+
15
+ def test_constructorAndGetters
16
+ entry = ::Zip::Entry.new(TEST_ZIPFILE,
17
+ TEST_NAME,
18
+ TEST_COMMENT,
19
+ TEST_EXTRA,
20
+ TEST_COMPRESSED_SIZE,
21
+ TEST_CRC,
22
+ TEST_COMPRESSIONMETHOD,
23
+ TEST_SIZE,
24
+ TEST_TIME)
25
+
26
+ assert_equal(TEST_COMMENT, entry.comment)
27
+ assert_equal(TEST_COMPRESSED_SIZE, entry.compressed_size)
28
+ assert_equal(TEST_CRC, entry.crc)
29
+ assert_instance_of(::Zip::ExtraField, entry.extra)
30
+ assert_equal(TEST_COMPRESSIONMETHOD, entry.compression_method)
31
+ assert_equal(TEST_NAME, entry.name)
32
+ assert_equal(TEST_SIZE, entry.size)
33
+ assert_equal(TEST_TIME, entry.time)
34
+ end
35
+
36
+ def test_is_directoryAndIsFile
37
+ assert(::Zip::Entry.new(TEST_ZIPFILE, "hello").file?)
38
+ assert(!::Zip::Entry.new(TEST_ZIPFILE, "hello").directory?)
39
+
40
+ assert(::Zip::Entry.new(TEST_ZIPFILE, "dir/hello").file?)
41
+ assert(!::Zip::Entry.new(TEST_ZIPFILE, "dir/hello").directory?)
42
+
43
+ assert(::Zip::Entry.new(TEST_ZIPFILE, "hello/").directory?)
44
+ assert(!::Zip::Entry.new(TEST_ZIPFILE, "hello/").file?)
45
+
46
+ assert(::Zip::Entry.new(TEST_ZIPFILE, "dir/hello/").directory?)
47
+ assert(!::Zip::Entry.new(TEST_ZIPFILE, "dir/hello/").file?)
48
+ end
49
+
50
+ def test_equality
51
+ entry1 = ::Zip::Entry.new("file.zip", "name", "isNotCompared",
52
+ "something extra", 123, 1234,
53
+ ::Zip::Entry::DEFLATED, 10000)
54
+ entry2 = ::Zip::Entry.new("file.zip", "name", "isNotComparedXXX",
55
+ "something extra", 123, 1234,
56
+ ::Zip::Entry::DEFLATED, 10000)
57
+ entry3 = ::Zip::Entry.new("file.zip", "name2", "isNotComparedXXX",
58
+ "something extra", 123, 1234,
59
+ ::Zip::Entry::DEFLATED, 10000)
60
+ entry4 = ::Zip::Entry.new("file.zip", "name2", "isNotComparedXXX",
61
+ "something extraXX", 123, 1234,
62
+ ::Zip::Entry::DEFLATED, 10000)
63
+ entry5 = ::Zip::Entry.new("file.zip", "name2", "isNotComparedXXX",
64
+ "something extraXX", 12, 1234,
65
+ ::Zip::Entry::DEFLATED, 10000)
66
+ entry6 = ::Zip::Entry.new("file.zip", "name2", "isNotComparedXXX",
67
+ "something extraXX", 12, 123,
68
+ ::Zip::Entry::DEFLATED, 10000)
69
+ entry7 = ::Zip::Entry.new("file.zip", "name2", "isNotComparedXXX",
70
+ "something extraXX", 12, 123,
71
+ ::Zip::Entry::STORED, 10000)
72
+ entry8 = ::Zip::Entry.new("file.zip", "name2", "isNotComparedXXX",
73
+ "something extraXX", 12, 123,
74
+ ::Zip::Entry::STORED, 100000)
75
+
76
+ assert_equal(entry1, entry1)
77
+ assert_equal(entry1, entry2)
78
+
79
+ assert(entry2 != entry3)
80
+ assert(entry3 != entry4)
81
+ assert(entry4 != entry5)
82
+ assert(entry5 != entry6)
83
+ assert(entry6 != entry7)
84
+ assert(entry7 != entry8)
85
+
86
+ assert(entry7 != "hello")
87
+ assert(entry7 != 12)
88
+ end
89
+
90
+ def test_compare
91
+ assert_equal(0, (::Zip::Entry.new("zf.zip", "a") <=> ::Zip::Entry.new("zf.zip", "a")))
92
+ assert_equal(1, (::Zip::Entry.new("zf.zip", "b") <=> ::Zip::Entry.new("zf.zip", "a")))
93
+ assert_equal(-1, (::Zip::Entry.new("zf.zip", "a") <=> ::Zip::Entry.new("zf.zip", "b")))
94
+
95
+ entries = [
96
+ ::Zip::Entry.new("zf.zip", "5"),
97
+ ::Zip::Entry.new("zf.zip", "1"),
98
+ ::Zip::Entry.new("zf.zip", "3"),
99
+ ::Zip::Entry.new("zf.zip", "4"),
100
+ ::Zip::Entry.new("zf.zip", "0"),
101
+ ::Zip::Entry.new("zf.zip", "2")
102
+ ]
103
+
104
+ entries.sort!
105
+ assert_equal("0", entries[0].to_s)
106
+ assert_equal("1", entries[1].to_s)
107
+ assert_equal("2", entries[2].to_s)
108
+ assert_equal("3", entries[3].to_s)
109
+ assert_equal("4", entries[4].to_s)
110
+ assert_equal("5", entries[5].to_s)
111
+ end
112
+
113
+ def test_parentAsString
114
+ entry1 = ::Zip::Entry.new("zf.zip", "aa")
115
+ entry2 = ::Zip::Entry.new("zf.zip", "aa/")
116
+ entry3 = ::Zip::Entry.new("zf.zip", "aa/bb")
117
+ entry4 = ::Zip::Entry.new("zf.zip", "aa/bb/")
118
+ entry5 = ::Zip::Entry.new("zf.zip", "aa/bb/cc")
119
+ entry6 = ::Zip::Entry.new("zf.zip", "aa/bb/cc/")
120
+
121
+ assert_equal(nil, entry1.parent_as_string)
122
+ assert_equal(nil, entry2.parent_as_string)
123
+ assert_equal("aa/", entry3.parent_as_string)
124
+ assert_equal("aa/", entry4.parent_as_string)
125
+ assert_equal("aa/bb/", entry5.parent_as_string)
126
+ assert_equal("aa/bb/", entry6.parent_as_string)
127
+ end
128
+
129
+ def test_entry_name_cannot_start_with_slash
130
+ assert_raises(::Zip::EntryNameError) { ::Zip::Entry.new("zf.zip", "/hej/der") }
131
+ end
132
+
133
+ def test_store_file_without_compression
134
+ File.delete('/tmp/no_compress.zip') if File.exists?('/tmp/no_compress.zip')
135
+ files = Dir[File.join('test/data/globTest', '**', '**')]
136
+
137
+ Zip.setup do |z|
138
+ z.write_zip64_support = false
139
+ end
140
+
141
+ zipfile = Zip::File.open('/tmp/no_compress.zip', Zip::File::CREATE)
142
+ mimetype_entry = Zip::Entry.new(zipfile, #@zipfile
143
+ 'mimetype', #@name
144
+ '', #@comment
145
+ '', #@extra
146
+ 0, #@compressed_size
147
+ 0, #@crc
148
+ Zip::Entry::STORED) #@comppressed_method
149
+
150
+ zipfile.add(mimetype_entry, 'test/data/mimetype')
151
+
152
+ files.each do |file|
153
+ zipfile.add(file.sub("test/data/globTest/", ''), file)
154
+ end
155
+ zipfile.close
156
+
157
+ f= File.open('/tmp/no_compress.zip', 'rb')
158
+ first_100_bytes = f.read(100)
159
+ f.close
160
+
161
+ assert_match(/mimetypeapplication\/epub\+zip/, first_100_bytes)
162
+ end
163
+
164
+
165
+ end
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ class ErrorsTest < MiniTest::Unit::TestCase
5
+
6
+ def test_rescue_legacy_zip_error
7
+ raise ::Zip::Error
8
+ rescue ::Zip::ZipError
9
+ end
10
+
11
+ def test_rescue_legacy_zip_entry_exists_error
12
+ raise ::Zip::EntryExistsError
13
+ rescue ::Zip::ZipEntryExistsError
14
+ end
15
+
16
+ def test_rescue_legacy_zip_destination_file_exists_error
17
+ raise ::Zip::DestinationFileExistsError
18
+ rescue ::Zip::ZipDestinationFileExistsError
19
+ end
20
+
21
+ def test_rescue_legacy_zip_compression_method_error
22
+ raise ::Zip::CompressionMethodError
23
+ rescue ::Zip::ZipCompressionMethodError
24
+ end
25
+
26
+ def test_rescue_legacy_zip_entry_name_error
27
+ raise ::Zip::EntryNameError
28
+ rescue ::Zip::ZipEntryNameError
29
+ end
30
+
31
+ def test_rescue_legacy_zip_internal_error
32
+ raise ::Zip::InternalError
33
+ rescue ::Zip::ZipInternalError
34
+ end
35
+
36
+ end
@@ -0,0 +1,69 @@
1
+ require 'test_helper'
2
+
3
+ class ZipExtraFieldTest < MiniTest::Unit::TestCase
4
+ def test_new
5
+ extra_pure = ::Zip::ExtraField.new("")
6
+ extra_withstr = ::Zip::ExtraField.new("foo")
7
+ assert_instance_of(::Zip::ExtraField, extra_pure)
8
+ assert_instance_of(::Zip::ExtraField, extra_withstr)
9
+ end
10
+
11
+ def test_unknownfield
12
+ extra = ::Zip::ExtraField.new("foo")
13
+ assert_equal(extra["Unknown"], "foo")
14
+ extra.merge("a")
15
+ assert_equal(extra["Unknown"], "fooa")
16
+ extra.merge("barbaz")
17
+ assert_equal(extra.to_s, "fooabarbaz")
18
+ end
19
+
20
+
21
+ def test_merge
22
+ str = "UT\x5\0\x3\250$\r@Ux\0\0"
23
+ extra1 = ::Zip::ExtraField.new("")
24
+ extra2 = ::Zip::ExtraField.new(str)
25
+ assert(!extra1.member?("UniversalTime"))
26
+ assert(extra2.member?("UniversalTime"))
27
+ extra1.merge(str)
28
+ assert_equal(extra1["UniversalTime"].mtime, extra2["UniversalTime"].mtime)
29
+ end
30
+
31
+ def test_length
32
+ str = "UT\x5\0\x3\250$\r@Ux\0\0Te\0\0testit"
33
+ extra = ::Zip::ExtraField.new(str)
34
+ assert_equal(extra.local_size, extra.to_local_bin.size)
35
+ assert_equal(extra.c_dir_size, extra.to_c_dir_bin.size)
36
+ extra.merge("foo")
37
+ assert_equal(extra.local_size, extra.to_local_bin.size)
38
+ assert_equal(extra.c_dir_size, extra.to_c_dir_bin.size)
39
+ end
40
+
41
+
42
+ def test_to_s
43
+ str = "UT\x5\0\x3\250$\r@Ux\0\0Te\0\0testit"
44
+ extra = ::Zip::ExtraField.new(str)
45
+ assert_instance_of(String, extra.to_s)
46
+
47
+ s = extra.to_s
48
+ extra.merge("foo")
49
+ assert_equal(s.length + 3, extra.to_s.length)
50
+ end
51
+
52
+ def test_equality
53
+ str = "UT\x5\0\x3\250$\r@"
54
+ extra1 = ::Zip::ExtraField.new(str)
55
+ extra2 = ::Zip::ExtraField.new(str)
56
+ extra3 = ::Zip::ExtraField.new(str)
57
+ assert_equal(extra1, extra2)
58
+
59
+ extra2["UniversalTime"].mtime = ::Zip::DOSTime.now
60
+ assert(extra1 != extra2)
61
+
62
+ extra3.create("IUnix")
63
+ assert(extra1 != extra3)
64
+
65
+ extra1.create("IUnix")
66
+ assert_equal(extra1, extra3)
67
+ end
68
+
69
+ end