aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-02-13 17:52:42 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-02-13 17:52:42 +0000
commit23ffb6a4a2a01fe41abe4e42d46fa16bdc2603fd (patch)
tree2627bf7cfc0d748ec007f0d6a2d23ad1ff985c59
parent6dd03f04ea3292d10ce06feda2f0c8272be0fb83 (diff)
downloadbusybox-w32-23ffb6a4a2a01fe41abe4e42d46fa16bdc2603fd.tar.gz
busybox-w32-23ffb6a4a2a01fe41abe4e42d46fa16bdc2603fd.tar.bz2
busybox-w32-23ffb6a4a2a01fe41abe4e42d46fa16bdc2603fd.zip
tar: compat: handle tarballs with only one zero block at the end
-rw-r--r--archival/libunarchive/get_header_tar.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/archival/libunarchive/get_header_tar.c b/archival/libunarchive/get_header_tar.c
index 274bd4607..7493d910e 100644
--- a/archival/libunarchive/get_header_tar.c
+++ b/archival/libunarchive/get_header_tar.c
@@ -90,7 +90,15 @@ char get_header_tar(archive_handle_t *archive_handle)
90 90
91 again_after_align: 91 again_after_align:
92 92
93 xread(archive_handle->src_fd, &tar, 512); 93 i = full_read(archive_handle->src_fd, &tar, 512);
94 /* if GNU tar sees EOF in above read, it says:
95 * "tar: A lone zero block at N", where N = kilobyte
96 * where EOF was met (not EOF block, actual EOF!),
97 * and tar will exit with error code 0! Mimic exit(0): */
98 if (i == 0)
99 xfunc_error_retval = 0;
100 if (i != 512)
101 bb_error_msg_and_die("short read");
94 archive_handle->offset += 512; 102 archive_handle->offset += 512;
95 103
96 /* If there is no filename its an empty header */ 104 /* If there is no filename its an empty header */