From bc3a980fa60fe86d6a2e0c79242ab076db6fbb7f Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Fri, 20 Oct 2017 13:26:29 +0200 Subject: [PATCH] Also support uncompressed control.tar files Change-Id: I8f8b36421d654b4441737f89ce43169bd8d3f4c5 --- Build/Deb.pm | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/Build/Deb.pm b/Build/Deb.pm index 904fca5..7584191 100644 --- a/Build/Deb.pm +++ b/Build/Deb.pm @@ -179,8 +179,9 @@ sub parse { } sub uncompress { - my $data = shift; - my $tool = shift; + my ($data, $tool) = @_; + return $data if $tool eq 'cat'; + return Compress::Zlib::memGunzip($data) if $have_zlib && $tool eq 'gunzip'; local (*TMP, *TMP2); open(TMP, "+>", undef) or die("could not open tmpfile\n"); syswrite TMP, $data; @@ -195,7 +196,7 @@ sub uncompress { close(TMP); $data = ''; 1 while sysread(TMP2, $data, 1024, length($data)) > 0; - close(TMP2) || die("$tool error"); + close(TMP2) || die("$tool error\n"); return $data; } @@ -230,7 +231,6 @@ sub debq { return (); } my $data = ''; - my $decompressor = "gunzip"; sysread(DEBF, $data, 4096); if (length($data) < 8+60) { warn("$fn: not a debian package - header too short\n"); @@ -254,16 +254,18 @@ sub debq { } } $data = substr($data, 8 + 60 + $len); - if (substr($data, 0, 16) ne 'control.tar.gz ' && - substr($data, 0, 16) ne 'control.tar.gz/ ') { - if (substr($data, 0, 16) eq 'control.tar.xz ' || - substr($data, 0, 16) eq 'control.tar.xz/ ') { - $decompressor = "unxz"; - } else { - warn("$fn: control.tar is not second ar entry\n"); - close DEBF unless ref $fn; - return (); - } + my $controlname = substr($data, 0, 16); + my $decompressor; + if ($controlname eq 'control.tar.gz ' || $controlname eq 'control.tar.gz/ ') { + $decompressor = 'gunzip'; + } elsif ($controlname eq 'control.tar.xz ' || $controlname eq 'control.tar.xz/ ') { + $decompressor = 'unxz'; + } elsif ($controlname eq 'control.tar ' || $controlname eq 'control.tar/ ') { + $decompressor = 'cat'; + } else { + warn("$fn: control.tar is not second ar entry\n"); + close DEBF unless ref $fn; + return (); } $len = substr($data, 48, 10); if (length($data) < 60+$len) { @@ -277,11 +279,7 @@ sub debq { close DEBF unless ref($fn); $data = substr($data, 60, $len); my $controlmd5 = Digest::MD5::md5_hex($data); # our header signature - if ($have_zlib && $decompressor eq "gunzip") { - $data = Compress::Zlib::memGunzip($data); - } else { - $data = uncompress($data, $decompressor); - } + $data = uncompress($data, $decompressor); if (!$data) { warn("$fn: corrupt control.tar file\n"); return (); -- 2.7.4