Add two new unpack strategies.
This commit is contained in:
parent
d3534c1cc2
commit
2a63d363c2
@ -6,6 +6,8 @@ class UnpackStrategy
|
||||
def self.strategies
|
||||
@strategies ||= [
|
||||
JarUnpackStrategy,
|
||||
LuaRockUnpackStrategy,
|
||||
MicrosoftOfficeXmlUnpackStrategy,
|
||||
ZipUnpackStrategy,
|
||||
XarUnpackStrategy,
|
||||
CompressUnpackStrategy,
|
||||
@ -87,6 +89,26 @@ class UncompressedUnpackStrategy < UnpackStrategy
|
||||
end
|
||||
end
|
||||
|
||||
class MicrosoftOfficeXmlUnpackStrategy < UncompressedUnpackStrategy
|
||||
def self.can_extract?(path:, magic_number:)
|
||||
return false unless ZipUnpackStrategy.can_extract?(path: path, magic_number: magic_number)
|
||||
|
||||
# Check further if the ZIP is a Microsoft Office XML document.
|
||||
magic_number.match?(/\APK\003\004/n) &&
|
||||
magic_number.match?(%r{\A.{30}(\[Content_Types\]\.xml|_rels/\.rels)}n)
|
||||
end
|
||||
end
|
||||
|
||||
class LuaRockUnpackStrategy < UncompressedUnpackStrategy
|
||||
def self.can_extract?(path:, magic_number:)
|
||||
return false unless ZipUnpackStrategy.can_extract?(path: path, magic_number: magic_number)
|
||||
|
||||
# Check further if the ZIP is a LuaRocks package.
|
||||
out, _, status = Open3.capture3("zipinfo", "-1", path)
|
||||
status.success? && out.split("\n").any? { |line| line.match?(%r{\A[^/]+.rockspec\Z}) }
|
||||
end
|
||||
end
|
||||
|
||||
class JarUnpackStrategy < UncompressedUnpackStrategy
|
||||
def self.can_extract?(path:, magic_number:)
|
||||
return false unless ZipUnpackStrategy.can_extract?(path: path, magic_number: magic_number)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user