From e8f7a88976107ff3e1c19bdb86ddab0f6430cb30 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Sun, 29 Jul 2018 10:04:51 +0200 Subject: [PATCH] =?UTF-8?q?Only=20call=20`hdiutil`=20if=20it=E2=80=99s=20a?= =?UTF-8?q?=20`bzip2`=20or=20`zlib`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Library/Homebrew/unpack_strategy.rb | 40 +++++++++++++------ Library/Homebrew/unpack_strategy/air.rb | 4 +- Library/Homebrew/unpack_strategy/bazaar.rb | 4 +- Library/Homebrew/unpack_strategy/bzip2.rb | 6 ++- Library/Homebrew/unpack_strategy/cab.rb | 6 ++- Library/Homebrew/unpack_strategy/compress.rb | 6 ++- Library/Homebrew/unpack_strategy/cvs.rb | 4 +- Library/Homebrew/unpack_strategy/diff.rb | 9 ----- Library/Homebrew/unpack_strategy/directory.rb | 4 +- Library/Homebrew/unpack_strategy/dmg.rb | 13 +++++- .../Homebrew/unpack_strategy/executable.rb | 6 ++- Library/Homebrew/unpack_strategy/fossil.rb | 6 ++- .../Homebrew/unpack_strategy/generic_unar.rb | 4 +- Library/Homebrew/unpack_strategy/git.rb | 4 +- Library/Homebrew/unpack_strategy/gzip.rb | 6 ++- Library/Homebrew/unpack_strategy/jar.rb | 11 +++-- Library/Homebrew/unpack_strategy/lha.rb | 6 ++- Library/Homebrew/unpack_strategy/lua_rock.rb | 11 +++-- Library/Homebrew/unpack_strategy/lzip.rb | 6 ++- Library/Homebrew/unpack_strategy/lzma.rb | 6 ++- Library/Homebrew/unpack_strategy/mercurial.rb | 4 +- .../unpack_strategy/microsoft_office_xml.rb | 10 +++-- Library/Homebrew/unpack_strategy/otf.rb | 6 ++- Library/Homebrew/unpack_strategy/p7zip.rb | 6 ++- Library/Homebrew/unpack_strategy/pkg.rb | 6 ++- Library/Homebrew/unpack_strategy/rar.rb | 6 ++- .../self_extracting_executable.rb | 10 ++--- Library/Homebrew/unpack_strategy/sit.rb | 6 ++- .../Homebrew/unpack_strategy/subversion.rb | 4 +- Library/Homebrew/unpack_strategy/tar.rb | 10 ++++- Library/Homebrew/unpack_strategy/ttf.rb | 8 ++-- Library/Homebrew/unpack_strategy/xar.rb | 6 ++- Library/Homebrew/unpack_strategy/xz.rb | 6 ++- Library/Homebrew/unpack_strategy/zip.rb | 6 ++- 34 files changed, 166 insertions(+), 90 deletions(-) delete mode 100644 Library/Homebrew/unpack_strategy/diff.rb diff --git a/Library/Homebrew/unpack_strategy.rb b/Library/Homebrew/unpack_strategy.rb index 10804b5896..b8a74c1a7e 100644 --- a/Library/Homebrew/unpack_strategy.rb +++ b/Library/Homebrew/unpack_strategy.rb @@ -1,7 +1,31 @@ module UnpackStrategy - # length of the longest regex (currently Tar) - MAX_MAGIC_NUMBER_LENGTH = 262 - private_constant :MAX_MAGIC_NUMBER_LENGTH + module Magic + # length of the longest regex (currently Tar) + MAX_MAGIC_NUMBER_LENGTH = 262 + + refine Pathname do + def magic_number + @magic_number ||= if directory? + "" + else + binread(MAX_MAGIC_NUMBER_LENGTH) || "" + end + end + + def file_type + @file_type ||= system_command("file", args: ["-b", self], print_stderr: false) + .stdout.chomp + end + + def zipinfo + @zipinfo ||= system_command("zipinfo", args: ["-1", self], print_stderr: false) + .stdout + .encode(Encoding::UTF_8, invalid: :replace) + .split("\n") + end + end + end + private_constant :Magic def self.strategies @strategies ||= [ @@ -18,7 +42,6 @@ module UnpackStrategy Xz, Lzip, Executable, - Diff, Git, Mercurial, Subversion, @@ -54,14 +77,8 @@ module UnpackStrategy end def self.from_path(path) - magic_number = if path.directory? - "" - else - File.binread(path, MAX_MAGIC_NUMBER_LENGTH) || "" - end - strategy = strategies.detect do |s| - s.can_extract?(path: path, magic_number: magic_number) + s.can_extract?(path) end # This is so that bad files produce good error messages. @@ -127,7 +144,6 @@ require "unpack_strategy/bzip2" require "unpack_strategy/cab" require "unpack_strategy/compress" require "unpack_strategy/cvs" -require "unpack_strategy/diff" require "unpack_strategy/directory" require "unpack_strategy/dmg" require "unpack_strategy/executable" diff --git a/Library/Homebrew/unpack_strategy/air.rb b/Library/Homebrew/unpack_strategy/air.rb index 4fd819c888..ff6ce25f21 100644 --- a/Library/Homebrew/unpack_strategy/air.rb +++ b/Library/Homebrew/unpack_strategy/air.rb @@ -2,7 +2,9 @@ module UnpackStrategy class Air include UnpackStrategy - def self.can_extract?(path:, magic_number:) + using Magic + + def self.can_extract?(path) path.extname == ".air" end diff --git a/Library/Homebrew/unpack_strategy/bazaar.rb b/Library/Homebrew/unpack_strategy/bazaar.rb index 4811d27279..684a5cad28 100644 --- a/Library/Homebrew/unpack_strategy/bazaar.rb +++ b/Library/Homebrew/unpack_strategy/bazaar.rb @@ -2,7 +2,9 @@ require_relative "directory" module UnpackStrategy class Bazaar < Directory - def self.can_extract?(path:, magic_number:) + using Magic + + def self.can_extract?(path) super && (path/".bzr").directory? end diff --git a/Library/Homebrew/unpack_strategy/bzip2.rb b/Library/Homebrew/unpack_strategy/bzip2.rb index 60378b7003..aa56ab711a 100644 --- a/Library/Homebrew/unpack_strategy/bzip2.rb +++ b/Library/Homebrew/unpack_strategy/bzip2.rb @@ -2,8 +2,10 @@ module UnpackStrategy class Bzip2 include UnpackStrategy - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\ABZh/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\ABZh/n) end private diff --git a/Library/Homebrew/unpack_strategy/cab.rb b/Library/Homebrew/unpack_strategy/cab.rb index acc3b1ec32..346ac014f2 100644 --- a/Library/Homebrew/unpack_strategy/cab.rb +++ b/Library/Homebrew/unpack_strategy/cab.rb @@ -2,8 +2,10 @@ module UnpackStrategy class Cab include UnpackStrategy - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\AMSCF/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\AMSCF/n) end def extract_to_dir(unpack_dir, basename:, verbose:) diff --git a/Library/Homebrew/unpack_strategy/compress.rb b/Library/Homebrew/unpack_strategy/compress.rb index a1851ccf4d..be7039beb6 100644 --- a/Library/Homebrew/unpack_strategy/compress.rb +++ b/Library/Homebrew/unpack_strategy/compress.rb @@ -2,8 +2,10 @@ require_relative "tar" module UnpackStrategy class Compress < Tar - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\A\037\235/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\A\037\235/n) end end end diff --git a/Library/Homebrew/unpack_strategy/cvs.rb b/Library/Homebrew/unpack_strategy/cvs.rb index cca3010703..4ec2b03c23 100644 --- a/Library/Homebrew/unpack_strategy/cvs.rb +++ b/Library/Homebrew/unpack_strategy/cvs.rb @@ -2,7 +2,9 @@ require_relative "directory" module UnpackStrategy class Cvs < Directory - def self.can_extract?(path:, magic_number:) + using Magic + + def self.can_extract?(path) super && (path/"CVS").directory? end end diff --git a/Library/Homebrew/unpack_strategy/diff.rb b/Library/Homebrew/unpack_strategy/diff.rb deleted file mode 100644 index e531c3290b..0000000000 --- a/Library/Homebrew/unpack_strategy/diff.rb +++ /dev/null @@ -1,9 +0,0 @@ -require_relative "uncompressed" - -module UnpackStrategy - class Diff < Uncompressed - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\A---\040/n) - end - end -end diff --git a/Library/Homebrew/unpack_strategy/directory.rb b/Library/Homebrew/unpack_strategy/directory.rb index 540369de75..b8909bc0ef 100644 --- a/Library/Homebrew/unpack_strategy/directory.rb +++ b/Library/Homebrew/unpack_strategy/directory.rb @@ -2,7 +2,9 @@ module UnpackStrategy class Directory include UnpackStrategy - def self.can_extract?(path:, magic_number:) + using Magic + + def self.can_extract?(path) path.directory? end diff --git a/Library/Homebrew/unpack_strategy/dmg.rb b/Library/Homebrew/unpack_strategy/dmg.rb index 1068c93486..e2f3b83322 100644 --- a/Library/Homebrew/unpack_strategy/dmg.rb +++ b/Library/Homebrew/unpack_strategy/dmg.rb @@ -4,6 +4,8 @@ module UnpackStrategy class Dmg include UnpackStrategy + using Magic + module Bom DMG_METADATA = Set.new %w[ .background @@ -83,12 +85,21 @@ module UnpackStrategy end system_command! "ditto", args: ["--bom", bomfile.path, "--", path, unpack_dir] + + FileUtils.chmod "u+w", Pathname.glob(unpack_dir/"**/*").reject(&:symlink?) end end end private_constant :Mount - def self.can_extract?(path:, magic_number:) + def self.can_extract?(path) + bzip2 = Bzip2.can_extract?(path) + + zlib = path.magic_number.match?(/\A(\x78|\x08|\x18|\x28|\x38|\x48|\x58|\x68)/n) && + (path.magic_number[0...2].unpack("S>").first % 31).zero? + + return false unless bzip2 || zlib + imageinfo = system_command("hdiutil", args: ["imageinfo", path], print_stderr: false).stdout diff --git a/Library/Homebrew/unpack_strategy/executable.rb b/Library/Homebrew/unpack_strategy/executable.rb index 020a86b99f..b7b2d9cb9a 100644 --- a/Library/Homebrew/unpack_strategy/executable.rb +++ b/Library/Homebrew/unpack_strategy/executable.rb @@ -2,8 +2,10 @@ require_relative "uncompressed" module UnpackStrategy class Executable < Uncompressed - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\A#!\s*\S+/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\A#!\s*\S+/n) end end end diff --git a/Library/Homebrew/unpack_strategy/fossil.rb b/Library/Homebrew/unpack_strategy/fossil.rb index 49b480ceab..9effd39874 100644 --- a/Library/Homebrew/unpack_strategy/fossil.rb +++ b/Library/Homebrew/unpack_strategy/fossil.rb @@ -2,8 +2,10 @@ module UnpackStrategy class Fossil include UnpackStrategy - def self.can_extract?(path:, magic_number:) - return false unless magic_number.match?(/\ASQLite format 3\000/n) + using Magic + + def self.can_extract?(path) + return false unless path.magic_number.match?(/\ASQLite format 3\000/n) # Fossil database is made up of artifacts, so the `artifact` table must exist. query = "select count(*) from sqlite_master where type = 'view' and name = 'artifact'" diff --git a/Library/Homebrew/unpack_strategy/generic_unar.rb b/Library/Homebrew/unpack_strategy/generic_unar.rb index 3b11df94a4..228e8fd05d 100644 --- a/Library/Homebrew/unpack_strategy/generic_unar.rb +++ b/Library/Homebrew/unpack_strategy/generic_unar.rb @@ -2,7 +2,9 @@ module UnpackStrategy class GenericUnar include UnpackStrategy - def self.can_extract?(path:, magic_number:) + using Magic + + def self.can_extract?(_path) false end diff --git a/Library/Homebrew/unpack_strategy/git.rb b/Library/Homebrew/unpack_strategy/git.rb index 2f9f6668b1..2f5768ca54 100644 --- a/Library/Homebrew/unpack_strategy/git.rb +++ b/Library/Homebrew/unpack_strategy/git.rb @@ -2,7 +2,9 @@ require_relative "directory" module UnpackStrategy class Git < Directory - def self.can_extract?(path:, magic_number:) + using Magic + + def self.can_extract?(path) super && (path/".git").directory? end end diff --git a/Library/Homebrew/unpack_strategy/gzip.rb b/Library/Homebrew/unpack_strategy/gzip.rb index 6ae5517603..c9dcc48d06 100644 --- a/Library/Homebrew/unpack_strategy/gzip.rb +++ b/Library/Homebrew/unpack_strategy/gzip.rb @@ -2,8 +2,10 @@ module UnpackStrategy class Gzip include UnpackStrategy - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\A\037\213/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\A\037\213/n) end private diff --git a/Library/Homebrew/unpack_strategy/jar.rb b/Library/Homebrew/unpack_strategy/jar.rb index 35e2b211c0..6c23d29f1f 100644 --- a/Library/Homebrew/unpack_strategy/jar.rb +++ b/Library/Homebrew/unpack_strategy/jar.rb @@ -2,14 +2,13 @@ require_relative "uncompressed" module UnpackStrategy class Jar < Uncompressed - def self.can_extract?(path:, magic_number:) - return false unless Zip.can_extract?(path: path, magic_number: magic_number) + using Magic + + def self.can_extract?(path) + return false unless Zip.can_extract?(path) # Check further if the ZIP is a JAR/WAR. - out, = Open3.capture3("zipinfo", "-1", path) - out.encode(Encoding::UTF_8, invalid: :replace) - .split("\n") - .include?("META-INF/MANIFEST.MF") + path.zipinfo.include?("META-INF/MANIFEST.MF") end end end diff --git a/Library/Homebrew/unpack_strategy/lha.rb b/Library/Homebrew/unpack_strategy/lha.rb index 9f71e75613..c0ade6f5e1 100644 --- a/Library/Homebrew/unpack_strategy/lha.rb +++ b/Library/Homebrew/unpack_strategy/lha.rb @@ -2,8 +2,10 @@ module UnpackStrategy class Lha include UnpackStrategy - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\A..-(lh0|lh1|lz4|lz5|lzs|lh\\40|lhd|lh2|lh3|lh4|lh5)-/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\A..-(lh0|lh1|lz4|lz5|lzs|lh\\40|lhd|lh2|lh3|lh4|lh5)-/n) end def dependencies diff --git a/Library/Homebrew/unpack_strategy/lua_rock.rb b/Library/Homebrew/unpack_strategy/lua_rock.rb index d9a9c2e6ba..e6bf7bf336 100644 --- a/Library/Homebrew/unpack_strategy/lua_rock.rb +++ b/Library/Homebrew/unpack_strategy/lua_rock.rb @@ -2,14 +2,13 @@ require_relative "uncompressed" module UnpackStrategy class LuaRock < Uncompressed - def self.can_extract?(path:, magic_number:) - return false unless Zip.can_extract?(path: path, magic_number: magic_number) + using Magic + + def self.can_extract?(path) + return false unless Zip.can_extract?(path) # Check further if the ZIP is a LuaRocks package. - out, = Open3.capture3("zipinfo", "-1", path) - out.encode(Encoding::UTF_8, invalid: :replace) - .split("\n") - .any? { |line| line.match?(%r{\A[^/]+.rockspec\Z}) } + path.zipinfo.grep(%r{\A[^/]+.rockspec\Z}).any? end end end diff --git a/Library/Homebrew/unpack_strategy/lzip.rb b/Library/Homebrew/unpack_strategy/lzip.rb index 21200c556d..364dd2139f 100644 --- a/Library/Homebrew/unpack_strategy/lzip.rb +++ b/Library/Homebrew/unpack_strategy/lzip.rb @@ -2,8 +2,10 @@ module UnpackStrategy class Lzip include UnpackStrategy - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\ALZIP/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\ALZIP/n) end def dependencies diff --git a/Library/Homebrew/unpack_strategy/lzma.rb b/Library/Homebrew/unpack_strategy/lzma.rb index f759b0cb66..189495c37f 100644 --- a/Library/Homebrew/unpack_strategy/lzma.rb +++ b/Library/Homebrew/unpack_strategy/lzma.rb @@ -2,8 +2,10 @@ module UnpackStrategy class Lzma include UnpackStrategy - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\A\]\000\000\200\000/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\A\]\000\000\200\000/n) end def extract_to_dir(unpack_dir, basename:, verbose:) diff --git a/Library/Homebrew/unpack_strategy/mercurial.rb b/Library/Homebrew/unpack_strategy/mercurial.rb index 518878fdb2..34e897857c 100644 --- a/Library/Homebrew/unpack_strategy/mercurial.rb +++ b/Library/Homebrew/unpack_strategy/mercurial.rb @@ -2,7 +2,9 @@ require_relative "directory" module UnpackStrategy class Mercurial < Directory - def self.can_extract?(path:, magic_number:) + using Magic + + def self.can_extract?(path) super && (path/".hg").directory? end diff --git a/Library/Homebrew/unpack_strategy/microsoft_office_xml.rb b/Library/Homebrew/unpack_strategy/microsoft_office_xml.rb index 6f3501816f..7d40000773 100644 --- a/Library/Homebrew/unpack_strategy/microsoft_office_xml.rb +++ b/Library/Homebrew/unpack_strategy/microsoft_office_xml.rb @@ -2,12 +2,14 @@ require_relative "uncompressed" module UnpackStrategy class MicrosoftOfficeXml < Uncompressed - def self.can_extract?(path:, magic_number:) - return false unless Zip.can_extract?(path: path, magic_number: magic_number) + using Magic + + def self.can_extract?(path) + return false unless Zip.can_extract?(path) # 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) + path.magic_number.match?(/\APK\003\004/n) && + path.magic_number.match?(%r{\A.{30}(\[Content_Types\]\.xml|_rels/\.rels)}n) end end end diff --git a/Library/Homebrew/unpack_strategy/otf.rb b/Library/Homebrew/unpack_strategy/otf.rb index f8f4ee531f..87d7c860d5 100644 --- a/Library/Homebrew/unpack_strategy/otf.rb +++ b/Library/Homebrew/unpack_strategy/otf.rb @@ -2,8 +2,10 @@ require_relative "uncompressed" module UnpackStrategy class Otf < Uncompressed - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\AOTTO/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\AOTTO/n) end end end diff --git a/Library/Homebrew/unpack_strategy/p7zip.rb b/Library/Homebrew/unpack_strategy/p7zip.rb index 4a8d7d093b..fa4fd3b7f1 100644 --- a/Library/Homebrew/unpack_strategy/p7zip.rb +++ b/Library/Homebrew/unpack_strategy/p7zip.rb @@ -2,8 +2,10 @@ module UnpackStrategy class P7Zip include UnpackStrategy - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\A7z\xBC\xAF\x27\x1C/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\A7z\xBC\xAF\x27\x1C/n) end def dependencies diff --git a/Library/Homebrew/unpack_strategy/pkg.rb b/Library/Homebrew/unpack_strategy/pkg.rb index dceee1ef56..a9f6597972 100644 --- a/Library/Homebrew/unpack_strategy/pkg.rb +++ b/Library/Homebrew/unpack_strategy/pkg.rb @@ -2,9 +2,11 @@ require_relative "uncompressed" module UnpackStrategy class Pkg < Uncompressed - def self.can_extract?(path:, magic_number:) + using Magic + + def self.can_extract?(path) path.extname.match?(/\A.m?pkg\Z/) && - (path.directory? || magic_number.match?(/\Axar!/n)) + (path.directory? || path.magic_number.match?(/\Axar!/n)) end end end diff --git a/Library/Homebrew/unpack_strategy/rar.rb b/Library/Homebrew/unpack_strategy/rar.rb index d7ecbbf64a..4b3d6acba6 100644 --- a/Library/Homebrew/unpack_strategy/rar.rb +++ b/Library/Homebrew/unpack_strategy/rar.rb @@ -2,8 +2,10 @@ module UnpackStrategy class Rar include UnpackStrategy - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\ARar!/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\ARar!/n) end def dependencies diff --git a/Library/Homebrew/unpack_strategy/self_extracting_executable.rb b/Library/Homebrew/unpack_strategy/self_extracting_executable.rb index a7de316716..9c442d778d 100644 --- a/Library/Homebrew/unpack_strategy/self_extracting_executable.rb +++ b/Library/Homebrew/unpack_strategy/self_extracting_executable.rb @@ -2,12 +2,12 @@ require_relative "generic_unar" module UnpackStrategy class SelfExtractingExecutable < GenericUnar - def self.can_extract?(path:, magic_number:) - return false unless magic_number.match?(/\AMZ/n) + using Magic - system_command("file", - args: [path], - print_stderr: false).stdout.include?("self-extracting") + def self.can_extract?(path) + return false unless path.magic_number.match?(/\AMZ/n) + + path.file_type.include?("self-extracting archive") end end end diff --git a/Library/Homebrew/unpack_strategy/sit.rb b/Library/Homebrew/unpack_strategy/sit.rb index 48098bb8cb..57ada1253c 100644 --- a/Library/Homebrew/unpack_strategy/sit.rb +++ b/Library/Homebrew/unpack_strategy/sit.rb @@ -2,8 +2,10 @@ require_relative "generic_unar" module UnpackStrategy class Sit < GenericUnar - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\AStuffIt/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\AStuffIt/n) end end end diff --git a/Library/Homebrew/unpack_strategy/subversion.rb b/Library/Homebrew/unpack_strategy/subversion.rb index 064baf921a..3824dce378 100644 --- a/Library/Homebrew/unpack_strategy/subversion.rb +++ b/Library/Homebrew/unpack_strategy/subversion.rb @@ -2,7 +2,9 @@ require_relative "directory" module UnpackStrategy class Subversion < Directory - def self.can_extract?(path:, magic_number:) + using Magic + + def self.can_extract?(path) super && (path/".svn").directory? end diff --git a/Library/Homebrew/unpack_strategy/tar.rb b/Library/Homebrew/unpack_strategy/tar.rb index 704e3890f4..b19f127764 100644 --- a/Library/Homebrew/unpack_strategy/tar.rb +++ b/Library/Homebrew/unpack_strategy/tar.rb @@ -2,8 +2,14 @@ module UnpackStrategy class Tar include UnpackStrategy - def self.can_extract?(path:, magic_number:) - return true if magic_number.match?(/\A.{257}ustar/n) + using Magic + + def self.can_extract?(path) + return true if path.magic_number.match?(/\A.{257}ustar/n) + + unless [Bzip2, Gzip, Lzip, Xz].any? { |s| s.can_extract?(path) } + return false + end # Check if `tar` can list the contents, then it can also extract it. IO.popen(["tar", "tf", path], err: File::NULL) do |stdout| diff --git a/Library/Homebrew/unpack_strategy/ttf.rb b/Library/Homebrew/unpack_strategy/ttf.rb index 8d1421a106..664f6f766e 100644 --- a/Library/Homebrew/unpack_strategy/ttf.rb +++ b/Library/Homebrew/unpack_strategy/ttf.rb @@ -2,11 +2,13 @@ require_relative "uncompressed" module UnpackStrategy class Ttf < Uncompressed - def self.can_extract?(path:, magic_number:) + using Magic + + def self.can_extract?(path) # TrueType Font - magic_number.match?(/\A\000\001\000\000\000/n) || + path.magic_number.match?(/\A\000\001\000\000\000/n) || # Truetype Font Collection - magic_number.match?(/\Attcf/n) + path.magic_number.match?(/\Attcf/n) end end end diff --git a/Library/Homebrew/unpack_strategy/xar.rb b/Library/Homebrew/unpack_strategy/xar.rb index b631aba77d..903732dc31 100644 --- a/Library/Homebrew/unpack_strategy/xar.rb +++ b/Library/Homebrew/unpack_strategy/xar.rb @@ -2,8 +2,10 @@ module UnpackStrategy class Xar include UnpackStrategy - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\Axar!/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\Axar!/n) end private diff --git a/Library/Homebrew/unpack_strategy/xz.rb b/Library/Homebrew/unpack_strategy/xz.rb index c7f418cede..1cbb23b330 100644 --- a/Library/Homebrew/unpack_strategy/xz.rb +++ b/Library/Homebrew/unpack_strategy/xz.rb @@ -2,8 +2,10 @@ module UnpackStrategy class Xz include UnpackStrategy - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\A\xFD7zXZ\x00/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\A\xFD7zXZ\x00/n) end def dependencies diff --git a/Library/Homebrew/unpack_strategy/zip.rb b/Library/Homebrew/unpack_strategy/zip.rb index df3a0c1220..237d43f3f5 100644 --- a/Library/Homebrew/unpack_strategy/zip.rb +++ b/Library/Homebrew/unpack_strategy/zip.rb @@ -2,8 +2,10 @@ module UnpackStrategy class Zip include UnpackStrategy - def self.can_extract?(path:, magic_number:) - magic_number.match?(/\APK(\003\004|\005\006)/n) + using Magic + + def self.can_extract?(path) + path.magic_number.match?(/\APK(\003\004|\005\006)/n) end private