diff options
author | Isaac Dunham <ibid.ag@gmail.com> | 2014-06-01 13:50:39 -0500 |
---|---|---|
committer | Isaac Dunham <ibid.ag@gmail.com> | 2014-06-01 13:50:39 -0500 |
commit | 670626ab009f1d369be94def71f48be2e88f0106 (patch) | |
tree | cdf9e2e09148f68005e7ccc532e3f0191686fb86 /scripts | |
parent | c20fb908bb733a3d7c1dda77a3c1d22d5c3fafec (diff) | |
download | toybox-670626ab009f1d369be94def71f48be2e88f0106.tar.gz |
cpio: archive more files
While writing tests for cpio, I found that cpio tries to open empty
files if they're regular files, and fails to archive them if unreadable.
This can be easily avoided, and is not the usual behavior.
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/test/cpio.test | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/scripts/test/cpio.test b/scripts/test/cpio.test new file mode 100755 index 00000000..d0528e52 --- /dev/null +++ b/scripts/test/cpio.test @@ -0,0 +1,39 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +# We need to test name and file padding. +# This means all possible values of strlen(name)+1 % 4, +# plus file sizes of at least 0-4. + +touch a bb ccc dddd +testing "cpio name padding" "cpio -o -H newc|cpio -it" "a\nbb\nccc\ndddd\n" "" "a\nbb\nccc\ndddd\n" +rm a bb ccc dddd + +touch a +printf '1' >b +printf '22' >c +printf '333' >d +testing "cpio file padding" "cpio -o -H newc|cpio -it" "a\nb\nc\nd\n" "" "a\nb\nc\nd\n" +rm a b c d + +touch a +printf '1' >bb +printf '22' >ccc +printf '333' >dddd +# With the proper padding, header length, and file length, +# the relevant bit should be here: +# 110*5 + 4*3 + 2 + 6*3 = 550 + 12 + 20 = 582 +# files are padded to n*4, names are padded to 2 + n*4 due to the header length +testing "cpio archive length" "cpio -o -H newc|dd ibs=2 skip=291 count=5" "TRAILER!!!" "" "a\nbb\nccc\ndddd\n" +testing "cpio archive magic" "cpio -o -H newc|dd ibs=2 count=3" "070701" "" "a\n" +# check name length (8 bytes before the empty "crc") +testing "cpio name length" "cpio -o -H newc|dd ibs=2 skip=47 count=4" "00000002" "" "a\n" +rm a bb ccc dddd + +# archive dangling symlinks and empty files even if we cannot open them +touch a; chmod a-rwx a; ln -s a/cant b +testing "cpio archives unreadable empty files" "cpio -o -H newc|cpio -it" "a\nb\n" "" "a\nb\n" +chmod u+rw a; rm -f a b + + |