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

Reply via email to