tar: compat: handle tarballs with only one zero block at the end
authorDenis Vlasenko <vda.linux@googlemail.com>
Wed, 13 Feb 2008 17:52:42 +0000 (17:52 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Wed, 13 Feb 2008 17:52:42 +0000 (17:52 -0000)
archival/libunarchive/get_header_tar.c

index 274bd46077b51fc9f77163a4ed2809d89b158d47..7493d910ee3e716c0845d445627c7b96704d8fb2 100644 (file)
@@ -90,7 +90,15 @@ char get_header_tar(archive_handle_t *archive_handle)
 
  again_after_align:
 
-       xread(archive_handle->src_fd, &tar, 512);
+       i = full_read(archive_handle->src_fd, &tar, 512);
+       /* if GNU tar sees EOF in above read, it says:
+        * "tar: A lone zero block at N", where N = kilobyte
+        * where EOF was met (not EOF block, actual EOF!),
+        * and tar will exit with error code 0! Mimic exit(0): */
+       if (i == 0)
+               xfunc_error_retval = 0;
+       if (i != 512)
+               bb_error_msg_and_die("short read");
        archive_handle->offset += 512;
 
        /* If there is no filename its an empty header */