diff --git a/tests/invalid-elf.sh b/tests/invalid-elf.sh index cc8577c2..7145c793 100755 --- a/tests/invalid-elf.sh +++ b/tests/invalid-elf.sh @@ -21,6 +21,67 @@ TEST_CASES="invalid-shrstrtab-idx invalid-shrstrtab-size invalid-shrstrtab-zero # Issue #64 regression test. Test ELF provided by issue submitter. TEST_CASES=$TEST_CASES' invalid-phdr-issue-64' +# Issue #132 regression test. Test ELF provided by issue submitter. +TEST_CASES=$TEST_CASES' invalid-shrink-rpath-issue-132' + +# Issue #133 regression test. Test ELFs provided by issue submitter. +set -x +for i in $(seq 0 5); do + # Not yet fixed! + if [ "$i" = 3 ]; then continue; fi + TEST_CASES=$TEST_CASES' invalid-strlen-issue-133-'$i +done +set +x + +# Issue #134 regression test. Test ELFs provided by issue submitter. +set -x +for i in $(seq 0 1); do + TEST_CASES=$TEST_CASES' invalid-null-ptr-issue-134-'$i +done +set +x + +# Not yet fixed! +# Issue #132 regression test. Test ELF provided by issue submitter. +#TEST_CASES=$TEST_CASES' invalid-string-index-issue-135' + +# Some ELFs are immediately recognized as invalid. Others, we need to +# attempt an operation to notice the problem. + +# shellcheck disable=SC2034 +invalid_shrstrtab_idx_CMDS='' +# shellcheck disable=SC2034 +invalid_shrstrtab_size_CMDS='' +# shellcheck disable=SC2034 +invalid_shrstrtab_zero_CMDS='' +# shellcheck disable=SC2034 +invalid_shrstrtab_nonterm_CMDS='' +# shellcheck disable=SC2034 +invalid_shdr_name_CMDS='' +# shellcheck disable=SC2034 +invalid_phdr_offset_CMDS='' +# shellcheck disable=SC2034 +invalid_phdr_issue_64_CMDS='' +# shellcheck disable=SC2034 +invalid_shrink_rpath_issue_132_CMDS='--shrink-rpath' +# shellcheck disable=SC2034 +invalid_strlen_issue_133_0_CMDS='--shrink-rpath' +# shellcheck disable=SC2034 +invalid_strlen_issue_133_1_CMDS='--shrink-rpath' +# shellcheck disable=SC2034 +invalid_strlen_issue_133_2_CMDS='--shrink-rpath' +# shellcheck disable=SC2034 +invalid_strlen_issue_133_3_CMDS='--shrink-rpath' +# shellcheck disable=SC2034 +invalid_strlen_issue_133_4_CMDS='--shrink-rpath' +# shellcheck disable=SC2034 +invalid_strlen_issue_133_5_CMDS='--shrink-rpath' +# shellcheck disable=SC2034 +invalid_null_ptr_issue_134_0_CMDS='--shrink-rpath' +# shellcheck disable=SC2034 +invalid_null_ptr_issue_134_1_CMDS='--shrink-rpath' +# shellcheck disable=SC2034 +invalid_string_index_issue_135_CMDS='--shrink-rpath' + # shellcheck disable=SC2034 invalid_shrstrtab_idx_MSG='data region extends past file end' # shellcheck disable=SC2034 @@ -35,24 +96,53 @@ invalid_shdr_name_MSG='data region extends past file end' invalid_phdr_offset_MSG='data region extends past file end' # shellcheck disable=SC2034 invalid_phdr_issue_64_MSG='program header table out of bounds' +# shellcheck disable=SC2034 +invalid_shrink_rpath_issue_132_MSG='data region extends past file end' +# shellcheck disable=SC2034 +invalid_strlen_issue_133_0_MSG='section name offset out of bounds' +# shellcheck disable=SC2034 +invalid_strlen_issue_133_1_MSG='data region extends past file end' +# shellcheck disable=SC2034 +invalid_strlen_issue_133_2_MSG='string table is not zero terminated' +# shellcheck disable=SC2034 +invalid_strlen_issue_133_3_MSG='not sure yet' +# shellcheck disable=SC2034 +invalid_strlen_issue_133_4_MSG='data region extends past file end' +# shellcheck disable=SC2034 +invalid_strlen_issue_133_5_MSG='string table size is zero' +# shellcheck disable=SC2034 +invalid_null_ptr_issue_134_0_MSG='no section headers' +# shellcheck disable=SC2034 +invalid_null_ptr_issue_134_1_MSG='no section headers' +# shellcheck disable=SC2034 +invalid_string_index_issue_135_MSG='no sure yet' FAILED_TESTS="" for tcase in $TEST_CASES; do if [ ! -r "$TEST_DIR/$tcase" ]; then - echo "Cannot read test case: $tcase" - exit 1 + echo "Cannot read test case: $tcase" + exit 1 fi - ../src/patchelf --output /dev/null "$TEST_DIR/$tcase" && res=$? || res=$? + var=$(echo "$tcase-CMDS" | tr '-' '_') + cmds= + eval "cmds=\${$var}" + + # Want the word-splitting, no arrays in POSIX shell + # shellcheck disable=SC2086 + ../src/patchelf $cmds --output /dev/null "$TEST_DIR/$tcase" && res=$? || res=$? if killed_by_signal "$res"; then - FAILED_TESTS="$FAILED_TESTS $tcase" + FAILED_TESTS="$FAILED_TESTS $tcase" fi var=$(echo "$tcase-MSG" | tr '-' '_') msg= eval "msg=\${$var}" - ../src/patchelf --output /dev/null "$TEST_DIR/$tcase" 2>&1 | + + # Want the word-splitting, no arrays in POSIX shell + # shellcheck disable=SC2086 + ../src/patchelf $cmds --output /dev/null "$TEST_DIR/$tcase" 2>&1 | grep "$msg" >/dev/null 2>/dev/null done diff --git a/tests/invalid-elf/invalid-null-ptr-issue-134-0 b/tests/invalid-elf/invalid-null-ptr-issue-134-0 new file mode 100644 index 00000000..3c2cd178 Binary files /dev/null and b/tests/invalid-elf/invalid-null-ptr-issue-134-0 differ diff --git a/tests/invalid-elf/invalid-null-ptr-issue-134-1 b/tests/invalid-elf/invalid-null-ptr-issue-134-1 new file mode 100644 index 00000000..26d5c24c Binary files /dev/null and b/tests/invalid-elf/invalid-null-ptr-issue-134-1 differ diff --git a/tests/invalid-elf/invalid-shrink-rpath-issue-132 b/tests/invalid-elf/invalid-shrink-rpath-issue-132 new file mode 100644 index 00000000..0e8b3fa9 Binary files /dev/null and b/tests/invalid-elf/invalid-shrink-rpath-issue-132 differ diff --git a/tests/invalid-elf/invalid-string-index-issue-135 b/tests/invalid-elf/invalid-string-index-issue-135 new file mode 100644 index 00000000..6398ba9c Binary files /dev/null and b/tests/invalid-elf/invalid-string-index-issue-135 differ diff --git a/tests/invalid-elf/invalid-strlen-issue-133-0 b/tests/invalid-elf/invalid-strlen-issue-133-0 new file mode 100644 index 00000000..e222c0d8 Binary files /dev/null and b/tests/invalid-elf/invalid-strlen-issue-133-0 differ diff --git a/tests/invalid-elf/invalid-strlen-issue-133-1 b/tests/invalid-elf/invalid-strlen-issue-133-1 new file mode 100644 index 00000000..a6d3f6f8 Binary files /dev/null and b/tests/invalid-elf/invalid-strlen-issue-133-1 differ diff --git a/tests/invalid-elf/invalid-strlen-issue-133-2 b/tests/invalid-elf/invalid-strlen-issue-133-2 new file mode 100644 index 00000000..e9a458d8 Binary files /dev/null and b/tests/invalid-elf/invalid-strlen-issue-133-2 differ diff --git a/tests/invalid-elf/invalid-strlen-issue-133-3 b/tests/invalid-elf/invalid-strlen-issue-133-3 new file mode 100644 index 00000000..62b0d07a Binary files /dev/null and b/tests/invalid-elf/invalid-strlen-issue-133-3 differ diff --git a/tests/invalid-elf/invalid-strlen-issue-133-4 b/tests/invalid-elf/invalid-strlen-issue-133-4 new file mode 100644 index 00000000..7b7fdd03 Binary files /dev/null and b/tests/invalid-elf/invalid-strlen-issue-133-4 differ diff --git a/tests/invalid-elf/invalid-strlen-issue-133-5 b/tests/invalid-elf/invalid-strlen-issue-133-5 new file mode 100644 index 00000000..dbda7843 Binary files /dev/null and b/tests/invalid-elf/invalid-strlen-issue-133-5 differ