Also support uncompressed control.tar files 77/197877/1
authorMichael Schroeder <mls@suse.de>
Fri, 20 Oct 2017 11:26:29 +0000 (13:26 +0200)
committerYonghee Han <onstudy@samsung.com>
Thu, 17 Jan 2019 01:39:51 +0000 (10:39 +0900)
Change-Id: I8f8b36421d654b4441737f89ce43169bd8d3f4c5

Build/Deb.pm

index 904fca5..7584191 100644 (file)
@@ -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 ();