ziperu 0.1.1-arm-linux-musl

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 (105) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +24 -0
  3. data/LICENSE-rubyzip.txt +24 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +276 -0
  6. data/lib/rubyzip.rb +4 -0
  7. data/lib/zip/central_directory.rb +5 -0
  8. data/lib/zip/compressor.rb +5 -0
  9. data/lib/zip/constants.rb +5 -0
  10. data/lib/zip/crypto/aes_encryption.rb +5 -0
  11. data/lib/zip/crypto/decrypted_io.rb +5 -0
  12. data/lib/zip/crypto/encryption.rb +5 -0
  13. data/lib/zip/crypto/null_encryption.rb +5 -0
  14. data/lib/zip/crypto/traditional_encryption.rb +5 -0
  15. data/lib/zip/crypto.rb +5 -0
  16. data/lib/zip/decompressor.rb +5 -0
  17. data/lib/zip/deflater.rb +5 -0
  18. data/lib/zip/dirtyable.rb +5 -0
  19. data/lib/zip/dos_time.rb +5 -0
  20. data/lib/zip/entry.rb +5 -0
  21. data/lib/zip/entry_set.rb +5 -0
  22. data/lib/zip/errors.rb +5 -0
  23. data/lib/zip/extra_field/aes.rb +5 -0
  24. data/lib/zip/extra_field/generic.rb +5 -0
  25. data/lib/zip/extra_field/ntfs.rb +5 -0
  26. data/lib/zip/extra_field/old_unix.rb +5 -0
  27. data/lib/zip/extra_field/universal_time.rb +5 -0
  28. data/lib/zip/extra_field/unix.rb +5 -0
  29. data/lib/zip/extra_field/unknown.rb +5 -0
  30. data/lib/zip/extra_field/zip64.rb +5 -0
  31. data/lib/zip/extra_field.rb +5 -0
  32. data/lib/zip/file.rb +5 -0
  33. data/lib/zip/file_split.rb +5 -0
  34. data/lib/zip/filesystem/dir.rb +5 -0
  35. data/lib/zip/filesystem/directory_iterator.rb +5 -0
  36. data/lib/zip/filesystem/file.rb +5 -0
  37. data/lib/zip/filesystem/file_stat.rb +5 -0
  38. data/lib/zip/filesystem/zip_file_name_mapper.rb +5 -0
  39. data/lib/zip/filesystem.rb +5 -0
  40. data/lib/zip/inflater.rb +5 -0
  41. data/lib/zip/input_stream.rb +5 -0
  42. data/lib/zip/ioextras/abstract_input_stream.rb +5 -0
  43. data/lib/zip/ioextras/abstract_output_stream.rb +5 -0
  44. data/lib/zip/ioextras/fake_io.rb +5 -0
  45. data/lib/zip/ioextras.rb +5 -0
  46. data/lib/zip/null_compressor.rb +5 -0
  47. data/lib/zip/null_decompressor.rb +5 -0
  48. data/lib/zip/null_input_stream.rb +5 -0
  49. data/lib/zip/output_stream.rb +5 -0
  50. data/lib/zip/pass_thru_compressor.rb +5 -0
  51. data/lib/zip/pass_thru_decompressor.rb +5 -0
  52. data/lib/zip/streamable_directory.rb +5 -0
  53. data/lib/zip/streamable_stream.rb +5 -0
  54. data/lib/zip/version.rb +5 -0
  55. data/lib/zip.rb +19 -0
  56. data/lib/ziperu/3.1/ziperu.so +0 -0
  57. data/lib/ziperu/3.2/ziperu.so +0 -0
  58. data/lib/ziperu/3.3/ziperu.so +0 -0
  59. data/lib/ziperu/3.4/ziperu.so +0 -0
  60. data/lib/ziperu/4.0/ziperu.so +0 -0
  61. data/lib/ziperu/central_directory.rb +136 -0
  62. data/lib/ziperu/compressor.rb +14 -0
  63. data/lib/ziperu/constants.rb +148 -0
  64. data/lib/ziperu/crypto.rb +72 -0
  65. data/lib/ziperu/decompressor.rb +35 -0
  66. data/lib/ziperu/deflater.rb +41 -0
  67. data/lib/ziperu/dirtyable.rb +48 -0
  68. data/lib/ziperu/dos_time.rb +87 -0
  69. data/lib/ziperu/entry.rb +760 -0
  70. data/lib/ziperu/entry_set.rb +147 -0
  71. data/lib/ziperu/errors.rb +154 -0
  72. data/lib/ziperu/extra_field/aes.rb +52 -0
  73. data/lib/ziperu/extra_field/generic.rb +45 -0
  74. data/lib/ziperu/extra_field/ntfs.rb +98 -0
  75. data/lib/ziperu/extra_field/old_unix.rb +52 -0
  76. data/lib/ziperu/extra_field/universal_time.rb +81 -0
  77. data/lib/ziperu/extra_field/unix.rb +45 -0
  78. data/lib/ziperu/extra_field/unknown.rb +37 -0
  79. data/lib/ziperu/extra_field/zip64.rb +86 -0
  80. data/lib/ziperu/extra_field.rb +109 -0
  81. data/lib/ziperu/file.rb +614 -0
  82. data/lib/ziperu/file_split.rb +93 -0
  83. data/lib/ziperu/filesystem/dir.rb +88 -0
  84. data/lib/ziperu/filesystem/directory_iterator.rb +50 -0
  85. data/lib/ziperu/filesystem/file.rb +265 -0
  86. data/lib/ziperu/filesystem/file_stat.rb +112 -0
  87. data/lib/ziperu/filesystem/zip_file_name_mapper.rb +83 -0
  88. data/lib/ziperu/filesystem.rb +76 -0
  89. data/lib/ziperu/inflater.rb +60 -0
  90. data/lib/ziperu/input_stream.rb +296 -0
  91. data/lib/ziperu/ioextras/abstract_input_stream.rb +137 -0
  92. data/lib/ziperu/ioextras/abstract_output_stream.rb +57 -0
  93. data/lib/ziperu/ioextras/fake_io.rb +41 -0
  94. data/lib/ziperu/ioextras.rb +42 -0
  95. data/lib/ziperu/null_compressor.rb +20 -0
  96. data/lib/ziperu/null_decompressor.rb +25 -0
  97. data/lib/ziperu/null_input_stream.rb +55 -0
  98. data/lib/ziperu/output_stream.rb +223 -0
  99. data/lib/ziperu/pass_thru_compressor.rb +29 -0
  100. data/lib/ziperu/pass_thru_decompressor.rb +37 -0
  101. data/lib/ziperu/streamable_directory.rb +15 -0
  102. data/lib/ziperu/streamable_stream.rb +59 -0
  103. data/lib/ziperu/version.rb +7 -0
  104. data/lib/ziperu.rb +116 -0
  105. metadata +156 -0
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Ported verbatim from rubyzip (Copyright (C) 2002-2026 the rubyzip authors).
4
+
5
+ module Ziperu
6
+ # Info-ZIP Extra for Zip64 size
7
+ class ExtraField::Zip64 < ExtraField::Generic # :nodoc:
8
+ attr_accessor :compressed_size, :disk_start_number,
9
+ :original_size, :relative_header_offset
10
+
11
+ HEADER_ID = ['0100'].pack('H*')
12
+ register_map
13
+
14
+ def initialize(binstr = nil)
15
+ # unparsed binary; we don't actually know what this contains
16
+ # without looking for FFs in the associated file header
17
+ # call parse after initializing with a binary string
18
+ @content = nil
19
+ @original_size = nil
20
+ @compressed_size = nil
21
+ @relative_header_offset = nil
22
+ @disk_start_number = nil
23
+ binstr && merge(binstr)
24
+ end
25
+
26
+ def ==(other)
27
+ other.original_size == @original_size &&
28
+ other.compressed_size == @compressed_size &&
29
+ other.relative_header_offset == @relative_header_offset &&
30
+ other.disk_start_number == @disk_start_number
31
+ end
32
+
33
+ def merge(binstr)
34
+ return if binstr.empty?
35
+
36
+ _, @content = initial_parse(binstr)
37
+ end
38
+
39
+ # pass the values from the base entry (if applicable)
40
+ # wider values are only present in the extra field for base values set to all FFs
41
+ # returns the final values for the four attributes (from the base or zip64 extra record)
42
+ def parse(original_size, compressed_size, relative_header_offset = nil, disk_start_number = nil)
43
+ @original_size = extract(8, 'Q<') if original_size == 0xFFFFFFFF
44
+ @compressed_size = extract(8, 'Q<') if compressed_size == 0xFFFFFFFF
45
+ if relative_header_offset && relative_header_offset == 0xFFFFFFFF
46
+ @relative_header_offset = extract(8, 'Q<')
47
+ end
48
+ @disk_start_number = extract(4, 'V') if disk_start_number && disk_start_number == 0xFFFF
49
+ @content = nil
50
+ [@original_size || original_size,
51
+ @compressed_size || compressed_size,
52
+ @relative_header_offset || relative_header_offset,
53
+ @disk_start_number || disk_start_number]
54
+ end
55
+
56
+ def extract(size, format)
57
+ @content.slice!(0, size).unpack1(format)
58
+ end
59
+ private :extract
60
+
61
+ # We can suppress the zip64 extra field unless we know the size is large or
62
+ # the relative header offset is large (for central directory entries).
63
+ def suppress?
64
+ !((@original_size && @original_size >= 0xFFFFFFFF) ||
65
+ (@relative_header_offset && @relative_header_offset >= 0xFFFFFFFF))
66
+ end
67
+
68
+ def pack_for_local
69
+ # Local header entries must contain original size and compressed size;
70
+ # other fields do not apply.
71
+ return '' unless @original_size && @compressed_size
72
+
73
+ [@original_size, @compressed_size].pack('Q<Q<')
74
+ end
75
+
76
+ def pack_for_c_dir
77
+ # central directory entries contain only fields that didn't fit in the main entry part
78
+ packed = (+'').force_encoding('BINARY')
79
+ packed << [@original_size].pack('Q<') if @original_size
80
+ packed << [@compressed_size].pack('Q<') if @compressed_size
81
+ packed << [@relative_header_offset].pack('Q<') if @relative_header_offset
82
+ packed << [@disk_start_number].pack('V') if @disk_start_number
83
+ packed
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Ported verbatim from rubyzip (Copyright (C) 2002-2026 the rubyzip authors).
4
+
5
+ module Ziperu
6
+ class ExtraField < Hash # :nodoc:all
7
+ ID_MAP = {}
8
+
9
+ def initialize(binstr = nil, local: false)
10
+ merge(binstr, local: local) if binstr
11
+ end
12
+
13
+ def extra_field_type_exist(binstr, id, len, index)
14
+ field_name = ID_MAP[id].name
15
+ if member?(field_name)
16
+ self[field_name].merge(binstr[index, len + 4])
17
+ else
18
+ field_obj = ID_MAP[id].new(binstr[index, len + 4])
19
+ self[field_name] = field_obj
20
+ end
21
+ end
22
+
23
+ def extra_field_type_unknown(binstr, len, index, local)
24
+ self[:unknown] ||= Unknown.new
25
+
26
+ if !len || len + 4 > binstr[index..].bytesize
27
+ self[:unknown].merge(binstr[index..], local: local)
28
+ return
29
+ end
30
+
31
+ self[:unknown].merge(binstr[index, len + 4], local: local)
32
+ end
33
+
34
+ def merge(binstr, local: false)
35
+ return if binstr.empty?
36
+
37
+ i = 0
38
+ while i < binstr.bytesize
39
+ id = binstr[i, 2]
40
+ len = binstr[i + 2, 2].to_s.unpack1('v')
41
+ if id && ID_MAP.member?(id)
42
+ break if len.nil? # a known header cut off before its length
43
+
44
+ extra_field_type_exist(binstr, id, len, i)
45
+ elsif id
46
+ break unless extra_field_type_unknown(binstr, len, i, local)
47
+ end
48
+ i += len + 4
49
+ end
50
+ end
51
+
52
+ def create(name)
53
+ unless (field_class = ID_MAP.values.find { |k| k.name == name })
54
+ raise Error, "Unknown extra field '#{name}'"
55
+ end
56
+
57
+ self[name] = field_class.new
58
+ end
59
+
60
+ # Place Unknown last, so "extra" data that is missing the proper
61
+ # signature/size does not prevent known fields from being read back in.
62
+ def ordered_values
63
+ result = []
64
+ each { |k, v| k == :unknown ? result.push(v) : result.unshift(v) }
65
+ result
66
+ end
67
+
68
+ # Remove any extra fields that indicate they can be safely suppressed.
69
+ def suppress_fields!(fields)
70
+ reject! do |k, v|
71
+ v.suppress? if fields == true || [*fields].include?(k)
72
+ end
73
+ end
74
+
75
+ def to_local_bin
76
+ ordered_values.map! { |v| v.to_local_bin.force_encoding('BINARY') }.join
77
+ end
78
+
79
+ alias to_s to_local_bin
80
+
81
+ def to_c_dir_bin
82
+ ordered_values.map! { |v| v.to_c_dir_bin.force_encoding('BINARY') }.join
83
+ end
84
+
85
+ def c_dir_size
86
+ to_c_dir_bin.bytesize
87
+ end
88
+
89
+ def local_size
90
+ to_local_bin.bytesize
91
+ end
92
+
93
+ alias length local_size
94
+ alias size local_size
95
+ end
96
+ end
97
+
98
+ require 'ziperu/extra_field/unknown'
99
+ require 'ziperu/extra_field/generic'
100
+ require 'ziperu/extra_field/universal_time'
101
+ require 'ziperu/extra_field/old_unix'
102
+ require 'ziperu/extra_field/unix'
103
+ require 'ziperu/extra_field/zip64'
104
+ require 'ziperu/extra_field/ntfs'
105
+ require 'ziperu/extra_field/aes'
106
+
107
+ # Copyright (C) 2002, 2003 Thomas Sondergaard
108
+ # rubyzip is free software; you can redistribute it and/or
109
+ # modify it under the terms of the ruby license.