Hello, I'm facing a strange problem when trying to extract a .tgz file using busybox tar.
I have tested it with the latest git version, but it also reproduces with older busybox versions. Busybox is compiled and used as described in Quick Start section from INSTALL file. How to reproduce: # create a 1M zero filled file $ dd count=1 bs=1M if=/dev/zero of=F0 # create a tgz archive containing this file $ PATH= ./busybox tar -czvf F0.tgz F0 # try to extract the file $ PATH= ./busybox tar -xzvf F0.tgz $ tar: invalid tar header checksum Analyze: The problem seems to be in libarchive/get_header_tar.c file, inside get_header_tar function. Although, F0.tgz is a compressed tar.gz file it seems that get_header_tar_function tries to interpret the first 512 bytes of F0.tgz as a tar header. In libarchive/get_header_tar.c:191: /* Check header has valid magic, "ustar" is for the proper tar, * five NULs are for the old tar format */ if (strncmp(tar.magic, "ustar", 5) != 0 && (!ENABLE_FEATURE_TAR_OLDGNU_COMPATIBILITY || memcmp(tar.magic, "\0\0\0\0", 5) != 0) TAR_OLDGNU_COMPATIBILITY is turned on. My question is why, isn't F0.tgz first decompressed to F0.tar, and after that extracted to F0? A possible solution would be that function open_zipped from libbb/read_printf.c to handle .tgz extensions in the same way as for .gz. thanks, Daniel. _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
