summaryrefslogtreecommitdiffstats
path: root/testsuite
diff options
context:
space:
mode:
authorDaniel Baumann <mail@daniel-baumann.ch>2015-11-07 11:42:39 +0000
committerDaniel Baumann <mail@daniel-baumann.ch>2015-11-07 11:42:39 +0000
commit04d72dd06c3c49fcc61e5ae7b8cee112d34e8df1 (patch)
treeaadf6684ddb287ecaaa4bfc482ab8859ce3742cb /testsuite
parentAdding debian version 1.15~pre1-2. (diff)
downloadlziprecover-04d72dd06c3c49fcc61e5ae7b8cee112d34e8df1.tar.xz
lziprecover-04d72dd06c3c49fcc61e5ae7b8cee112d34e8df1.zip
Merging upstream version 1.15~rc1.
Signed-off-by: Daniel Baumann <mail@daniel-baumann.ch>
Diffstat (limited to 'testsuite')
-rwxr-xr-xtestsuite/check.sh34
-rw-r--r--testsuite/unzcrash.cc28
2 files changed, 40 insertions, 22 deletions
diff --git a/testsuite/check.sh b/testsuite/check.sh
index 4ac7f59..314c19e 100755
--- a/testsuite/check.sh
+++ b/testsuite/check.sh
@@ -1,5 +1,5 @@
#! /bin/sh
-# check script for Lziprecover - Data recovery tool for lzipped files
+# check script for Lziprecover - Data recovery tool for lzip files
# Copyright (C) 2009, 2010, 2011, 2012, 2013 Antonio Diaz Diaz.
#
# This script is free software: you have unlimited permission
@@ -10,7 +10,7 @@ export LC_ALL
objdir=`pwd`
testdir=`cd "$1" ; pwd`
LZIP="${objdir}"/lziprecover
-LZIPRECOVER="${objdir}"/lziprecover
+LZIPRECOVER="${LZIP}"
framework_failure() { echo "failure in testing framework" ; exit 1 ; }
if [ ! -x "${LZIP}" ] ; then
@@ -65,9 +65,21 @@ if [ $? = 1 ] ; then printf . ; else fail=1 ; printf - ; fi
if [ $? = 1 ] ; then printf . ; else fail=1 ; printf - ; fi
"${LZIPRECOVER}" -sq
if [ $? = 1 ] ; then printf . ; else fail=1 ; printf - ; fi
-
-"${LZIP}" -t "${testdir}"/test.txt.lz || fail=1
-"${LZIP}" -cd "${testdir}"/test.txt.lz > copy || fail=1
+"${LZIP}" -tq "${in}"
+if [ $? = 2 ] ; then printf . ; else fail=1 ; printf - ; fi
+"${LZIP}" -tq < "${in}"
+if [ $? = 2 ] ; then printf . ; else fail=1 ; printf - ; fi
+"${LZIP}" -cdq "${in}"
+if [ $? = 2 ] ; then printf . ; else fail=1 ; printf - ; fi
+"${LZIP}" -cdq < "${in}"
+if [ $? = 2 ] ; then printf . ; else fail=1 ; printf - ; fi
+dd if="${in_lz}" bs=1 count=6 2> /dev/null | "${LZIP}" -tq
+if [ $? = 2 ] ; then printf . ; else printf - ; fail=1 ; fi
+dd if="${in_lz}" bs=1 count=20 2> /dev/null | "${LZIP}" -tq
+if [ $? = 2 ] ; then printf . ; else printf - ; fail=1 ; fi
+
+"${LZIP}" -t "${in_lz}" || fail=1
+"${LZIP}" -cd "${in_lz}" > copy || fail=1
cmp "${in}" copy || fail=1
printf .
@@ -100,8 +112,8 @@ for i in "${f5b1_lz}" "${f5b3_lz}" "${f5b4_lz}" "${f5b5_lz}" ; do
cmp "${fox5_lz}" copy.lz || fail=1
"${LZIPRECOVER}" -mf -o copy.lz "${i}" "${f5b2_lz}" || fail=1
cmp "${fox5_lz}" copy.lz || fail=1
- printf .
done
+printf .
for i in "${f5b3_lz}" "${f5b4_lz}" "${f5b5_lz}" ; do
"${LZIPRECOVER}" -mf -o copy.lz "${f5b1_lz}" "${f5b2_lz}" "${i}" || fail=1
@@ -116,8 +128,8 @@ for i in "${f5b3_lz}" "${f5b4_lz}" "${f5b5_lz}" ; do
cmp "${fox5_lz}" copy.lz || fail=1
"${LZIPRECOVER}" -mf -o copy.lz "${i}" "${f5b2_lz}" "${f5b1_lz}" || fail=1
cmp "${fox5_lz}" copy.lz || fail=1
- printf .
done
+printf .
"${LZIPRECOVER}" -mf -o copy.lz "${f5b3_lz}" "${f5b4_lz}" "${f5b5_lz}" || fail=1
cmp "${fox5_lz}" copy.lz || fail=1
@@ -141,9 +153,9 @@ for i in "${bad1_lz}" "${bad2_lz}" ; do
cmp "${in_lz}" copy.lz || fail=1
"${LZIPRECOVER}" -mf -o copy.lz "${j}" "${i}" || fail=1
cmp "${in_lz}" copy.lz || fail=1
- printf .
done
done
+printf .
"${LZIPRECOVER}" -mf -o copy.lz "${bad3_lz}" "${bad4_lz}" "${bad5_lz}" || fail=1
cmp "${in_lz}" copy.lz || fail=1
@@ -171,7 +183,6 @@ if [ $? = 0 ] && [ ! -e copy.lz ] ; then printf . ; else fail=1 ; printf - ; fi
if [ $? = 2 ] && [ ! -e copy.lz ] ; then printf . ; else fail=1 ; printf - ; fi
"${LZIPRECOVER}" -Rf -o copy.lz "${f5b1_lz}" || fail=1
cmp "${fox5_lz}" copy.lz || fail=1
-printf .
"${LZIPRECOVER}" -Rf -o copy.lz "${bad1_lz}" || fail=1
cmp "${in_lz}" copy.lz || fail=1
printf .
@@ -182,8 +193,8 @@ printf "garbage" >> copy || fail=1
for i in 1 2 3 ; do
"${LZIPRECOVER}" -cd rec${i}copy.lz > copy || fail=1
cmp "${in}" copy || fail=1
- printf .
done
+printf .
cat "${in_lz}" > anyothername || framework_failure
"${LZIP}" -d anyothername || fail=1
@@ -191,8 +202,7 @@ cmp "${in}" anyothername.out || fail=1
printf .
cat "${in}" "${in}" > in2 || framework_failure
-cat "${in_lz}" "${in_lz}" > out2 || framework_failure
-"${LZIP}" -d < out2 > copy2 || fail=1
+cat "${in_lz}" "${in_lz}" | "${LZIP}" -d > copy2 || fail=1
cmp in2 copy2 || fail=1
printf .
diff --git a/testsuite/unzcrash.cc b/testsuite/unzcrash.cc
index 24defa6..b2cdc4e 100644
--- a/testsuite/unzcrash.cc
+++ b/testsuite/unzcrash.cc
@@ -1,5 +1,4 @@
-/* Unzcrash - A test program written to test robustness to
- decompression of corrupted data.
+/* Unzcrash - Tests robustness of decompressors to corrupted data.
Inspired by unzcrash.c from Julian Seward's bzip2.
Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013 Antonio Diaz Diaz.
@@ -16,6 +15,12 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+/*
+ Exit status: 0 for a normal exit, 1 for environmental problems
+ (file not found, invalid flags, I/O errors, etc), 2 to indicate a
+ corrupt or invalid input file, 3 for an internal consistency error
+ (eg, bug) which caused unzcrash to panic.
+*/
#include <cerrno>
#include <climits>
@@ -47,9 +52,8 @@ int verbosity = 0;
void show_help()
{
- std::printf( "%s - A test program written to test robustness to\n", Program_name );
- std::printf( "decompression of corrupted data.\n"
- "\nUsage: %s [options] \"lzip -tv\" filename.lz\n", invocation_name );
+ std::printf( "%s - Tests robustness of decompressors to corrupted data.\n", Program_name );
+ std::printf( "\nUsage: %s [options] \"lzip -tv\" filename.lz\n", invocation_name );
std::printf( "\nThis program reads the specified file and then repeatedly decompresses\n"
"it, increasing 256 times each byte of the compressed data, so as to test\n"
"all possible one-byte errors. This should not cause any invalid memory\n"
@@ -63,8 +67,12 @@ void show_help()
" -s, --size=<bytes> number of byte positions to test [all]\n"
" -v, --verbose be verbose (a 2nd -v gives more)\n"
"Examples of <range>: 1 1,2,3 1-4 1,3-5,8 1-3,5-8\n"
+ "\nExit status: 0 for a normal exit, 1 for environmental problems (file\n"
+ "not found, invalid flags, I/O errors, etc), 2 to indicate a corrupt or\n"
+ "invalid input file, 3 for an internal consistency error (eg, bug) which\n"
+ "caused unzcrash to panic.\n"
"\nReport bugs to lzip-bug@nongnu.org\n"
- "Lzip home page: http://www.nongnu.org/lzip/lzip.html\n" );
+ "Lziprecover home page: http://www.nongnu.org/lzip/lziprecover.html\n" );
}
@@ -160,7 +168,7 @@ unsigned long long getnum( const char * const ptr,
}
-class Bitset8 // 8 value bitset (1..8)
+class Bitset8 // 8 value bitset (1 to 8)
{
bool data[8];
static bool valid_digit( const unsigned char ch )
@@ -195,7 +203,7 @@ public:
return false;
}
- // number of n-bit errors per byte (n=0..8): 1 8 28 56 70 56 28 8 1
+ // number of N-bit errors per byte (N=0 to 8): 1 8 28 56 70 56 28 8 1
void print() const
{
std::fflush( stderr );
@@ -295,9 +303,9 @@ int main( const int argc, const char * const argv[] )
if( size >= buffer_size )
{
if( verbosity >= 0 )
- std::fprintf( stderr, "input file '%s' is too big.\n",
+ std::fprintf( stderr, "input file '%s' is too large.\n",
parser.argument( argind + 1 ).c_str() );
- return 1;
+ return 2;
}
std::fclose( f );