Hi, Holger Levsen wrote:
> the typo3 orig.tar.gz as it is in squeeze or sid is sufficient: gunzip it and
> compress it with pxz and "voila"...
*builds pxz, tests*
Luckily the cause seems to be simple. pxz works by concatenating
whole XZ files, but for simplicity busybox unxz ignores everything
past the end of the first stream it reads. Meanwhile standard xz
handles concatenated streams by concatenating their decompressed form.
$ xz --robot -v -l broken.tar.xz | grep stream
stream 1 1 0 0 11083380 25169920 0.440
CRC64 0
stream 2 1 11083380 25169920 5431156 25169920
0.216 CRC64 0
stream 3 1 16514536 50339840 267724 1505280 0.178
CRC64 0
$ busybox unxz -c <broken.tar.xz | wc -c
25169920
$ xz -dc <broken.tar.xz | wc -c
51845120
This could be avoided by putting the compressed chunks into Blocks
instead of Streams, but that requires deeper knowledge of the file
format (see /usr/share/doc/liblzma-dev/xz-file-format.txt). Or
perhaps busybox unxz should learn about concatenated streams.
Simplified example compressed file to play with attached.
$ printf he | xz >test.xz
$ echo llo | xz >>test.xz
$ unxz <test.xz
hello
$ busybox unxz <test.xz
he$
Have fun,
Jonathan
concatenated.xz
Description: Binary data

